.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、上代码。


        #region 发送邮件
        static void Main(string[] args)
        {
            Program p = new Program();

            string FromMial = "[email protected]";
            string ToMial = "[email protected];[email protected]";
            string AuthorizationCode = "sx*****l";
            // string ReplyTo="";
            // string CCMial="";
            string File_Path = "C:/Users/xinlings-v/Desktop/啦啦啦.docx";

            p.SendMail(FromMial, ToMial, AuthorizationCode, null, null, File_Path);
        }

        /// 
        /// 发送邮件方法
        /// 
        /// 发件人邮箱
        /// 收件人邮箱(多个收件人地址用";"号隔开)
        /// 发件人授权码
        /// 对方回复邮件时默认的接收地址(不设置也是可以的)
        /// //邮件的抄送者(多个抄送人用";"号隔开)
        /// 附件的地址
        public void SendMail(string FromMial, string ToMial, string AuthorizationCode, string ReplyTo, string CCMial, string File_Path)
        {
            try
            {
                //实例化一个发送邮件类。
                MailMessage mailMessage = new MailMessage();

                //邮件的优先级,分为 Low, Normal, High,通常用 Normal即可
                mailMessage.Priority = MailPriority.Normal;

                //发件人邮箱地址。
                mailMessage.From = new MailAddress(FromMial);

                //收件人邮箱地址。需要群发就写多个
                //拆分邮箱地址
                List ToMiallist = ToMial.Split(';').ToList();
                for (int i = 0; i < ToMiallist.Count; i++)
                {
                    mailMessage.To.Add(new MailAddress(ToMiallist[i]));  //收件人邮箱地址。
                }

                if (ReplyTo == "" || ReplyTo == null)
                {
                    ReplyTo = FromMial;
                }

                //对方回复邮件时默认的接收地址(不设置也是可以的哟)
                mailMessage.ReplyTo = new MailAddress(ReplyTo);

                if (CCMial != "" && CCMial != null)
                {
                    List CCMiallist = ToMial.Split(';').ToList();
                    for (int i = 0; i < CCMiallist.Count; i++)
                    {
                        //邮件的抄送者,支持群发
                        mailMessage.CC.Add(new MailAddress(CCMial));
                    }
                }
                //如果你的邮件标题包含中文,这里一定要指定,否则对方收到的极有可能是乱码。
                mailMessage.SubjectEncoding = Encoding.GetEncoding(936);

                //邮件正文是否是HTML格式
                mailMessage.IsBodyHtml = false;

                //邮件标题。
                mailMessage.Subject = "发送邮件测试";
                //邮件内容。
                mailMessage.Body = "测试群发邮件,以及附件邮件!.....";

                //设置邮件的附件,将在客户端选择的附件先上传到服务器保存一个,然后加入到mail中  
                if (File_Path != "" && File_Path != null)
                {
                    //将附件添加到邮件
                    mailMessage.Attachments.Add(new Attachment(File_Path));
                    //获取或设置此电子邮件的发送通知。
                    mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
                }

                //实例化一个SmtpClient类。
                SmtpClient client = new SmtpClient();

                #region 设置邮件服务器地址

                //在这里我使用的是163邮箱,所以是smtp.163.com,如果你使用的是qq邮箱,那么就是smtp.qq.com。
                // client.Host = "smtp.163.com";
                if (FromMial.Length != 0)
                {
                    //根据发件人的邮件地址判断发件服务器地址   默认端口一般是25
                    string[] addressor = FromMial.Trim().Split(new Char[] { '@', '.' });
                    switch (addressor[1])
                    {
                        case "163":
                            client.Host = "smtp.163.com";
                            break;
                        case "126":
                            client.Host = "smtp.126.com";
                            break;
                        case "qq":
                            client.Host = "smtp.qq.com";
                            break;
                        case "gmail":
                            client.Host = "smtp.gmail.com";
                            break;
                        case "hotmail":
                            client.Host = "smtp.live.com";//outlook邮箱
                            //client.Port = 587;
                            break;
                        case "foxmail":
                            client.Host = "smtp.foxmail.com";
                            break;
                        case "sina":
                            client.Host = "smtp.sina.com.cn";
                            break;
                        default:
                            client.Host = "smtp.exmail.qq.com";//qq企业邮箱
                            break;
                    }
                }
                #endregion

                //使用安全加密连接。
                client.EnableSsl = true;
                //不和请求一块发送。
                client.UseDefaultCredentials = false;

                //验证发件人身份(发件人的邮箱,邮箱里的生成授权码);
                client.Credentials = new NetworkCredential(FromMial, AuthorizationCode);

                //如果发送失败,SMTP 服务器将发送 失败邮件告诉我  
                mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
                //发送
                client.Send(mailMessage);
                Console.WriteLine("发送成功");
            }
            catch (Exception)
            {

                Console.WriteLine("发送失败");
            }
        }
        #endregion

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

  4.1、mail from address must be same as authorization user

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

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

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

.Net实现邮箱发送邮件(MailMessage)_第1张图片

           4.1.2、授权码错误。

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

.Net实现邮箱发送邮件(MailMessage)_第2张图片

  4.2、Error: need EHLO and AUTH first !

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

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

 

你可能感兴趣的:(.net)