zoukankan      html  css  js  c++  java
  • .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)
  • 相关阅读:
    第6课.内联函数分析
    第5课.引用的本质分析
    第4课.布尔类型和引用
    第3课.进化后的const
    第2课.C到C++的升级
    c语言深度解剖(笔记)
    你必须知道的495个c语言问题(笔记)
    JS弹出框
    车牌号正则表达式
    input输入文字后背景色变成了黄色 CSS改变(去掉黄色背景)
  • 原文地址:https://www.cnblogs.com/fcppl/p/14470205.html
Copyright © 2011-2022 走看看