一、邮箱设置

开启MSTP服务,相当于一个授权的过程,开启这个后才可以通过第三方发送邮件。
微信截图_20210930114143.png
微信截图_20210930114306.png

二、代码实现

.Net中可以通过两个库来实现发邮件 分别为System.Net.Mail和MailKit这两个库。

(1)System.Net.Mail

appsettings.json配置
“Email”: {
“AuthorizationCode”: “*“,
“SendAddress”: “952711409@qq.com”,
“STMP”: “smtp.qq.com”
}

  1. using Microsoft.Extensions.Configuration;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Net;
  5. using System.Net.Mail;
  6. namespace Rili.DeviceArchive.Utility
  7. {
  8. public class EmailModel
  9. {
  10. public string Subject { get; set; }
  11. public string Content { get; set; }
  12. public List<string> ToAddress { get; set; }
  13. /// <summary>
  14. /// 抄送地址
  15. /// </summary>
  16. public List<string> CarbonCopyAddress { get; set; }
  17. }
  18. public class EmailHelper
  19. {
  20. public static void SendEmail(EmailModel emailModel)
  21. {
  22. try
  23. {
  24. IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
  25. configurationBuilder.AddJsonFile("appsettings.json");
  26. IConfigurationRoot root = configurationBuilder.Build();
  27. var emailRoot = root.GetSection("Email");
  28. var authorizationCode = emailRoot["AuthorizationCode"].ToString(); //授权码
  29. var sendAddress = emailRoot["SendAddress"].ToString(); //发起地址
  30. var STMP = emailRoot["STMP"].ToString(); //STMP服务地址
  31. MailMessage message = new MailMessage();
  32. //设置发件人,发件人需要与设置的邮件发送服务器的邮箱一致
  33. MailAddress fromAddr = new MailAddress(sendAddress);
  34. message.From = fromAddr;
  35. //设置收件人
  36. if (emailModel.ToAddress != null)
  37. {
  38. emailModel.ToAddress.ForEach(toAddress =>
  39. {
  40. message.To.Add(toAddress);
  41. });
  42. }
  43. //设置抄送人
  44. if (emailModel.CarbonCopyAddress != null)
  45. {
  46. emailModel.CarbonCopyAddress.ForEach(carbonCopyAddress =>
  47. {
  48. message.CC.Add(carbonCopyAddress);
  49. });
  50. }
  51. //设置邮件标题
  52. message.Subject = emailModel.Subject;
  53. //设置邮件内容
  54. message.Body = emailModel.Content;
  55. //设置邮件发送服务器,服务器根据你使用的邮箱而不同,可以到相应的 邮箱管理后台查看,下面是QQ的
  56. SmtpClient client = new SmtpClient(STMP, 25);
  57. //设置发送人的邮箱账号和密码[授权码]
  58. client.Credentials = new NetworkCredential(sendAddress, authorizationCode);
  59. //启用ssl,也就是安全发送
  60. client.EnableSsl = true;
  61. client.UseDefaultCredentials = false;
  62. //发送邮件
  63. client.Send(message);
  64. }
  65. catch (Exception ex)
  66. {
  67. }
  68. }
  69. }
  70. }

代码调用

EmailModel item = new EmailModel {
    Subject= "主题",
    Content= "邮件内容",
    ToAddress = new List<string>() { "zhanghao.mars@163.com" }
};
EmailHelper.SendEmail(item);

(2)MailKit

安装MailKit包
微信截图_20210930115037.png

appsettings.json配置(同上System.Net.Mail)

using Microsoft.Extensions.Configuration;
using MimeKit;
using MimeKit.Text;
using MailKit.Net.Smtp;
using System;
using System.Collections.Generic;

namespace Rili.DeviceArchive.Utility
{
    public class EmailModel
    {
        public string Subject { get; set; }
        public string Content { get; set; }
        public List<string> ToAddress { get; set; }
        /// <summary>
        /// 抄送地址
        /// </summary>
        public List<string> CarbonCopyAddress { get; set; }
    }

    public class EmailHelper
    {
        public static void SendEmail(EmailModel emailModel)
        {
            try
            {
                IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
                configurationBuilder.AddJsonFile("appsettings.json");
                IConfigurationRoot root = configurationBuilder.Build();
                var emailRoot = root.GetSection("Email");
                var authorizationCode = emailRoot["AuthorizationCode"].ToString();
                var sendEmailAddress = emailRoot["SendEmailAddress"].ToString();
                var STMP = emailRoot["STMP"].ToString();

                MimeMessage message = new MimeMessage();
                //发件人
                message.From.Add(new MailboxAddress("**系统", sendEmailAddress));
                //设置收件人
                string Name = "收件人名称";
                if (emailModel.ToAddress != null)
                {
                    emailModel.ToAddress.ForEach(toAddress =>
                    {
                        message.To.Add(new MailboxAddress(Name, toAddress));
                    });
                }
                //设置抄送人
                if (emailModel.CarbonCopyAddress != null)
                {
                    emailModel.CarbonCopyAddress.ForEach(carbonCopyAddress =>
                    {
                        message.Cc.Add(new MailboxAddress(Name, carbonCopyAddress));
                    });
                }
                //主题
                message.Subject = emailModel.Subject;
                //产生一个支持HTml的TextPart
                TextPart body = new TextPart(TextFormat.Html)
                {
                    Text = emailModel.Content
                };

                //创建Multipart添加附件
                Multipart multipart = new Multipart("mixed");
                multipart.Add(body);
                //附件
                //MimePart attachment = new MimePart()
                //{
                //    ContentObject = new ContentObject(File.OpenRead(absolutePath), ContentEncoding.Default),
                //    ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
                //    ContentTransferEncoding = ContentEncoding.Base64,
                //    FileName = Path.GetFileName(absolutePath)
                //};
                //multipart.Add(attachment);
                message.Body = multipart;

                using (SmtpClient client = new SmtpClient())
                {
                    //Smtp服务器
                    client.Connect(STMP, 587, false);
                    //登录,发送
                    client.Authenticate(sendEmailAddress, authorizationCode);

                    client.Send(message);
                    //断开
                    client.Disconnect(true);
                }
            }
            catch (Exception ex)
            {

            }
        }
    }
}

代码调用(同上System.Net.Mail)