首页 > 其他分享 >Mailkit 发送附件邮件

Mailkit 发送附件邮件

时间:2025-01-03 21:37:00浏览次数:1  
标签:Mailkit builder await var 附件 new message 邮件

Mailkit 发送附件邮件

写在开头

恰好最近的项目有个业务需求,需要发送含多个附件的邮件,所以以此文记录

项目需引入Mailkit库。

基础代码

var message = new MimeMessage();
message.From.Add (new MailboxAddress ("发出人", "邮箱"));
 message.To.Add (new MailboxAddress ("发送人", "邮箱"));
message.Cc.Add (new MailboxAddress ("抄送人", "邮箱"));
message.Subject = "标题";


builder.TextBody = @"文本";
builder.HtmlBody ="<span>html字符串</span>";
await  builder.Attachments.AddAsync ("文件名.xlsx", stream流);//附件
message.Body = builder.ToMessageBody ();
using var client = new SmtpClient();
await client.ConnectAsync("smtp.exmail.qq.com", 25, false);//填对应的
await client.AuthenticateAsync("邮箱名", "密码");
await client.SendAsync(message);
await client.DisconnectAsync(true);

附件处理

首先通过Dictionary存储相关数据:

var dic=new Dictionary<string,MemoryStream>();
var data1=list1.Select(a=>new{字段名1=值1,字段名2=值2});
Output(data1,"表名1",ref dic);
var data2=list2.Select(a=>new{字段名1=值1,字段名2=值2});
Output(data2,"表名2",ref dic);
.......
  //附件
 foreach (var keyval in dic)
{
  await  builder.Attachments.AddAsync (keyval.Key, keyval.Value);
}

每一个表都要select new一次,这也太麻烦了,有什么更好的解决方案呢?

是的,我们可以使用特性及反射进一步处理简化代码。

[Description("表名")]
public class Table1{
  [Description("数字编号")]
  public int Num{get;set;}
  [Description("名称")]
  public string Name{get;set;}
}

var sheetDes=typeof(T).GetCustomAttribute<DescriptionAttribute>()?.Description;
//var sheetDes=typeof(T).GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute; 
 foreach (var prop in typeof(T).GetProperties())
        {
            var val = prop.GetCustomAttribute<DescriptionAttribute>()?.Description;
        }

写在最后

ok,到这也差不多了,可以发现,反射泛型特性等C#基础特性可以很好的帮助我们更快的完成业务需求开发!

标签:Mailkit,builder,await,var,附件,new,message,邮件
From: https://www.cnblogs.com/ssz0312/p/18650922

相关文章

  • 电力交易笔记-附件6:现货交易费用定义
    政府授权合约签订政府授权合约的新能源市场主体可以正常参与电力中长期交易,政府授权合约电量按照政府授权合约电价与市场参考电价进行差价结算。成本补偿费用在现货市场中,发电侧存在机组启动成本、空载成本以及必开机组结算电价低于成本等额外的运行成本。为了补偿这些成本,建立......
  • Coravel:一个可轻松实现任务调度、队列、邮件发送的开源项目
    推荐一个轻量级的任务调度开源项目。01项目简介Coravel是一个.NET开源任务调度库,只需简单代码、几乎零配置就可以实现多种功能柜,如任务调度、队列、缓存、事件广播和邮件发送等。该项目特点就是让这些通常复杂的功能变得易于访问和使用,同时提供简洁、直观的语法。02核心功能......
  • WxPython跨平台开发框架之前后端结合实现附件信息的上传及管理
    在使用wxPython开发跨平台应用时,结合后端实现附件信息的上传和管理是一种常见需求。WxPython跨平台开发框架是前后端分离的框架,前端采用的是WxPython+aiohttp 来构建跨平台的界面展示和处理,后端使用FastAPI,SQLAlchemy,Pydantic,Redis等技术构建的项目。后端数据库访问......
  • 电力交易笔记-附件4:售电公司
    整个电力系统是由发电厂、电网、用电企业三部分构成的,电从发电厂来一经过电网一再到用电企业最早的电力系统电网公司和发电厂是一家的,叫国家电力公司,效率非常低下于是2002年第一次电力体制改革开始了,把国家电力公司分为了很多个发电集团和国家电网公司(请注意,从中也就分出来了......
  • 电力交易笔记-附件5:负荷集成商,也叫负荷聚合商
    转自https://www.zhihu.com/question/468414700/answer/2248279000 负荷聚合商(loadaggregator,LA)作为新的专业化需求响应资源整合者,最先出现在发达国家,通过专业技术评估用户的需求响应潜力,整合分散的需求响应资源来参与电力系统运营。从系统运行方的角度看,LA被看做是一个大......
  • 申请开通25号端口用于邮件发送功能
    为了实现网站后台系统的邮件通知功能,我打算借助QQ平台发送邮件。然而,目前服务器上默认关闭了25号端口,导致邮件发送失败。请问如何申请开通此端口?是否有其他替代方案可供选择?解决方案:您好,关于您提出的开通25号端口的需求,我们理解这对您的业务非常重要。以下是具体的处理流程及相......
  • 如何解决网站邮件发送功能无法正常工作的问题?
    当您遇到网站的邮件发送功能无法正常工作时,可以按照以下步骤进行排查和修复:检查邮件服务器配置:首先确认您的邮件服务器配置是否正确。确保SMTP地址、端口、用户名和密码都与邮件服务提供商的要求一致。检查邮件服务器是否支持SSL/TLS加密,并根据需要启用或禁用。验证send......
  • 网站邮件发送功能无法正常工作
    检查邮件配置:确认您的邮件服务器配置是否正确。包括SMTP服务器地址、端口号、用户名和密码等信息。这些配置通常在您的应用程序配置文件中定义。如果您使用的是第三方邮件服务(如SendGrid、Mailgun等),请确保API密钥和其他必要设置已正确配置。验证邮件发送函数:检查sendma......
  • DNS解析 电子邮件安全协议 DMACR
    什么是DMARC记录?DMARC记录是一条发布在域名上面的,在DNS中的TXT记录,位于_dmarc.yourdomain.com,在这里“yourdomain.com”是实际的域名或者子域名。它告诉接收邮件的服务器当邮件在DMARC验证中失败时,应该如何处理,并且应该把邮件验证数据发往哪里。DMARC记录由一系列......
  • 在 .NET C# 中的邮件合并过程中操作表格单元格
    TXTextControl中的邮件合并类是一个强大的库,旨在通过将数据合并到模板中来自动创建文档。它充当结构化数据(例如来自数据库、JSON或XML)和动态文档生成之间的桥梁,对于需要自动化文档工作流程的应用程序来说非常有用。从本质上讲,MailMerge类简化了创建专业、数据驱动文档......