.Net实现邮箱发送邮件(MailMessage

 1、微软已经帮我们封装好了发送邮件的类 MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。MailMessage常用的一些属性有:

  1.1、From:发件人邮箱地址。

  1.2、To:收件人的邮箱地址。

     1.3、CC:抄送人邮箱地址。

  1.4、Subject:邮件标题。

  1.5、Body:邮件内容。

        1.6、Attachments:邮件附件

2、还需要用到SmtpClient类进行发送邮件。SmtpClient类的意思是:允许应用程序使用简单邮件传输协议 (SMTP) 来发送电子邮件。SmtpClient类常用的一些属性和方法:

  2.1、Host: 获取或设置用于 SMTP 事务的主机的名称或 IP 地址。

  2.2、EnableSsl:是否使用安全套接字层加密连接。

  2.3、UseDefaultCredentials:是否随请求一起发送。

  2.4、Credentials:获取或设置用于验证发件人身份的凭证。

  2.5、Send():发送。

3、上代码。

  1. #region 发送邮件
  2. static void Main(string[] args)
  3. {
  4. Program p = new Program();
  5. string FromMail = "155@163.com";
  6. string ToMail = "172@qq.com;1725@163.com";
  7. string AuthorizationCode = "sx*****l";
  8. // string ReplyTo="";
  9. // string CCMail="";
  10. string File_Path = "C:/Users/xinlings-v/Desktop/啦啦啦.docx";
  11. p.SendMail(FromMail, ToMail, AuthorizationCode, null, null, File_Path);
  12. }
  13. /// <summary>
  14. /// 发送邮件方法
  15. /// </summary>
  16. /// <param name="FromMail">发件人邮箱</param>
  17. /// <param name="ToMail">收件人邮箱(多个收件人地址用";"号隔开)</param>
  18. /// <param name="AuthorizationCode">发件人授权码</param>
  19. /// <param name="ReplyTo">对方回复邮件时默认的接收地址(不设置也是可以的)</param>
  20. /// <param name="CCMail">//邮件的抄送者(多个抄送人用";"号隔开)</param>
  21. /// <param name="File_Path">附件的地址</param>
  22. public void SendMail(string FromMail, string ToMail, string AuthorizationCode, string ReplyTo, string CCMail, string File_Path)
  23. {
  24. try
  25. {
  26. //实例化一个发送邮件类。
  27. MailMessage mailMessage = new MailMessage();
  28. //邮件的优先级,分为 Low, Normal, High,通常用 Normal即可
  29. mailMessage.Priority = MailPriority.Normal;
  30. //发件人邮箱地址。
  31. mailMessage.From = new MailAddress(FromMail);
  32. //收件人邮箱地址。需要群发就写多个
  33. //拆分邮箱地址
  34. List<string> ToMaillist = ToMail.Split(';').ToList();
  35. for (int i = 0; i < ToMaillist.Count; i++)
  36. {
  37. mailMessage.To.Add(new MailAddress(ToMaillist[i])); //收件人邮箱地址。
  38. }
  39. if (ReplyTo == "" || ReplyTo == null)
  40. {
  41. ReplyTo = FromMial;
  42. }
  43. //对方回复邮件时默认的接收地址(不设置也是可以的哟)
  44. mailMessage.ReplyTo = new MailAddress(ReplyTo);
  45. if (CCMail != "" && CCMail != null)
  46. {
  47. List<string> CCMaillist = ToMail.Split(';').ToList();
  48. for (int i = 0; i < CCMaillist.Count; i++)
  49. {
  50. //邮件的抄送者,支持群发
  51. mailMessage.CC.Add(new MailAddress(CCMail));
  52. }
  53. }
  54. //如果你的邮件标题包含中文,这里一定要指定,否则对方收到的极有可能是乱码。
  55. mailMessage.SubjectEncoding = Encoding.UTF8;
  56. //邮件正文是否是HTML格式
  57. mailMessage.IsBodyHtml = false;
  58. //邮件标题。
  59. mailMessage.Subject = "发送邮件测试";
  60. //邮件内容。
  61. mailMessage.Body = "测试群发邮件,以及附件邮件!.....";
  62. //设置邮件的附件,将在客户端选择的附件先上传到服务器保存一个,然后加入到mail中
  63. if (File_Path != "" && File_Path != null)
  64. {
  65. //将附件添加到邮件
  66. mailMessage.Attachments.Add(new Attachment(File_Path));
  67. //获取或设置此电子邮件的发送通知。
  68. mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
  69. }
  70. //实例化一个SmtpClient类。
  71. SmtpClient client = new SmtpClient();
  72. #region 设置邮件服务器地址
  73. //在这里我使用的是163邮箱,所以是smtp.163.com,如果你使用的是qq邮箱,那么就是smtp.qq.com。
  74. // client.Host = "smtp.163.com";
  75. if (FromMail.Length != 0)
  76. {
  77. //根据发件人的邮件地址判断发件服务器地址 默认端口一般是25
  78. string[] addressor = FromMail.Trim().Split(new Char[] { '@', '.' });
  79. switch (addressor[1])
  80. {
  81. case "163":
  82. client.Host = "smtp.163.com";
  83. break;
  84. case "126":
  85. client.Host = "smtp.126.com";
  86. break;
  87. case "qq":
  88. client.Host = "smtp.qq.com";
  89. break;
  90. case "gmail":
  91. client.Host = "smtp.gmail.com";
  92. break;
  93. case "hotmail":
  94. client.Host = "smtp.live.com";//outlook邮箱
  95. //client.Port = 587;
  96. break;
  97. case "foxmail":
  98. client.Host = "smtp.foxmail.com";
  99. break;
  100. case "sina":
  101. client.Host = "smtp.sina.com.cn";
  102. break;
  103. default:
  104. client.Host = "smtp.exmail.qq.com";//qq企业邮箱
  105. break;
  106. }
  107. }
  108. #endregion
  109. //使用安全加密连接。
  110. client.EnableSsl = true;
  111. //不和请求一块发送。
  112. client.UseDefaultCredentials = false;
  113. //验证发件人身份(发件人的邮箱,邮箱里的生成授权码);
  114. client.Credentials = new NetworkCredential(FromMail, AuthorizationCode);
  115. //如果发送失败,SMTP 服务器将发送 失败邮件告诉我
  116. mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
  117. //发送
  118. client.Send(mailMessage);
  119. Console.WriteLine("发送成功");
  120. }
  121. catch (Exception)
  122. {
  123. Console.WriteLine("发送失败");
  124. }
  125. }
  126. #endregion

4、常见错误信息及解决办法。

  4.1、mail from address must be same as authorization user

    一般出这种情况的原因有两种:

    4.1.1、POP3/IMAP/SMTP未开启。(这里以易网邮箱为例)

        解决办法:进入邮箱 - - - - -》设置- - - - -》常规设置- - - - -》然后找到POP3/IMAP/SMTP开启即可。

           4.1.2、授权码错误。

        解决办法:进入邮箱- - - - -》设置- - - - -》常规设置- - - - -》然后找到客户端授权密码,开启客户端授权码

  4.2、Error: need EHLO and AUTH first !

     一般情况系出现这种错误原因是SmtpClient类的EnableSsl、UseDefaultCredentials属性放到了Credentials属性之下。

     解决办法:将SmtpClient类的EnableSsl、UseDefaultCredentials属性放到了Credentials属性之上。

本文转载:[.Net实现邮箱发送邮件(MailMessage](https://blog.csdn.net/SunshineBlog/article/details/86570714)
原文地址:https://www.cnblogs.com/fcppl/p/14470205.html