可使用 Smtp 和 MailKit 两种不同的邮件驱动发送邮件。Smtp 是 windows平台,MailKit 是跨平台。
有两种开启方式:
1、开启邮件需要自定义配置文件,文件目录:Setting\EmailSetting.jsonEmailSetting。
此种方式发件人(账号、密码、邮箱等)固定,不能动态替换。
文件内容:
{ "MailSettings": { "EmailDriver": "Smtp", "DeliveryMethod": "Network", "From": "xxxxxx@qq.com", "UserName": "11111111", "Password": "icj/TO9BKJd+otEQTTkND5idcJKfwHbdTUPPGHsHWFHL0GwL7Kb120ETv0uNPQhURvtS8QR0UpcStdcTw52MdiCjfv3CQqLDu8212LaJQSzhTadd/pHO+0zw5edPhqpkZktAPaQi7rVYaFmb9QnMFMjt0WAunduzHSJFjTIIf0Cpkcm5USuBmSYoA8tWE8qq25YC35yZG3RgH68i5TSXfIza5e956MUQ3ha9DL/vQ17kajJbxtUsMH2l7Bntvy6mQMu5V+vksc8H1OznfTvi2cGOFs9vORCEV658zgSGyQmfzx+Xlev1BY53LyAUEXpeg0nBtHrVoyq9XbkMy9SsBw==", "Host": "smtp.qq.com", "Port": 587, "EnableSsl": true, "SecureSocketOptions": 3, //为 MailKit 专属 "EmailLog": 1, "PickupDirectoryLocation": "E:\\LightCMS\\EmailEml", "EmailDebugAddress": [ "xxxxxx@qq.com" ], "EmailSecretBcc": [ "xxxxxx@qq.com" ], "Certificate": { "Signed": { "Path": "E:\\LightCMS\\EmailEml\\EmailOM4T.pfx", "Password": "123456" }, "Encrypted": { "Path": "E:\\LightCMS\\EmailEml\\EmailOM4T.pfx", "Password": "123456" } }, } }
发送邮件:
// 注入 IFluentEmail 类 [Autowired] private IFluentEmail _FluentEmail { get; set; } // 发送邮件 SendResponse sendResult = _FluentEmail.SetFromName("liu_linguang").To("liu_linguang@ccwonline.com.cn").Subject("test").Body("123").Send();
方法链说明:
SetFromName:发件人名称;
To:收件人;
Subject:邮件标题;
Body:正文。
配置项 | 说明 |
---|---|
EmailDriver | 设置邮件驱动,可设置 Smtp 或 MailKit,如果不设置默认为 Smtp。 |
DeliveryMethod | 设置为固定值:Network。 |
From | 设置发件人邮箱。 |
UserName | 设置发件人用户名。 |
Password | 设置发件人密码,一般是 RSA 加密后的字符串。 |
Host | 设置邮件服务器的 Host 地址。 |
Port | 设置邮件服务器的 Post 端口。 |
EnableSsl | 设置邮件是否 SSL 加密,true 或 false。 |
SecureSocketOptions | MailKit 专属,设置驱动为 MailKit,必须设置该项。 |
EmailLog | 设置发送邮件的日志,1:No,不记录日志;2:Simple,简单日志;3:All,详细日志。 |
PickupDirectoryLocation | 设置本地存储发送邮件 eml 文件的硬盘绝对路径。 |
EmailDebugAddress | 设置 Debug 收件人,如果设置该项,所有发送的邮件由该收件人接收,用于 Debug 模式下的邮件调试。 |
EmailSecretBcc | 设置秘密抄送地址。 |
Certificate | 设置邮件签名和邮件加密,Path 为证书文件的硬盘绝对路径,Password 为证书密码。 |
2、IFluentEmail 多租户模式。此种方式不需要注入 IFluentEmail 类,只能通过实例化对象的方式。
真实业务中,如果需要动态配置发件人邮箱以及账号密码,或者从数据库中读取。
创建邮件操作帮助类 EmailHelper,并标记 Component 特性。方法中初始化 Email 对象,示例中的参数为发件人的用户名和密码。
[Component] public class EmailHelper { [Autowired] private EmailSetting _EmailSetting { get; set; } public Email InitEmail(string username, string password) { return new Email(new EmailSetting { EmailDriver = _EmailSetting.EmailDriver, DeliveryMethod = _EmailSetting.DeliveryMethod, UserName = username, Password = RSA_Key.Decrypt(password), Host = _EmailSetting.Host, Port = _EmailSetting.Port, EnableSsl = _EmailSetting.EnableSsl, EmailLog = _EmailSetting.EmailLog, PickupDirectoryLocation = _EmailSetting.PickupDirectoryLocation, EmailSecretBcc = _EmailSetting.EmailSecretBcc, Certificate = _EmailSetting.Certificate, EmailDebugAddress = _EmailSetting.EmailDebugAddress, SecureSocketOptions = _EmailSetting.SecureSocketOptions }); } }
发送邮件:
// 注入 EmailHelper 类 [Autowired] private EmailHelper _EmailHelper { get; set; } // 发送邮件,model 对象保存邮件数据 IFluentEmail fluentEmail = _EmailHelper.InitEmail(model.UserName, model.PassWord); SendResponse sendResult = await fluentEmail.SetFrom(model.From).To(model.Email).SetFromName(model.DisplayName).Subject($"{model.Subject}").Body(emailContent, true).SendAsync();