老话题之C#写邮件发送

         唉!近来特么QQ邮件也犯二,突然间以前写的代码邮件发不出去,各种报错,无奈之下,换成了@163.com,可是报错依然,该开通(POP3/SMTP/IMAP)的都开通了!我勒了个草,像是在玩哥一样,还好哥不以为然,不然还真不知道和谁过不去。

          闲话少叙,言归正传,本次以@163.com为例,来给自己写一份记录事迹,各大邮件商可谓煞费苦心,想收你钱那,唉!从注册开始吧!

          当你注册一个@163.com邮箱时,要开通POP3/SMTP/IMAP就必须设置【授权码】,但有了这授权码这类设置得授权了才能用,但是为了能让C#程序通过163服务器发出邮件,那你还得把你的邮箱密码改成【授权码】一样,不然就发不出去(原因本人不明,知道的同学请赐教,不胜感激,但经过结论试验得出!)!

       接下来就是上代码

       先看我的配置文件

      

    <add key="sendEmail" value="13066802098@163.com,lei12345678,smtp.163.com,测试邮件"/>
    <add key="sendContext" value="您好!欢迎来到XXX网,您的注册验证码是{0},有效期10分钟,过期无效!谢谢"/>
  </appSettings>

      然后上后台代码

        /// <summary>
        /// 发送邮件的方法
        /// </summary>
        /// <param name="context">邮件内容中要替换的变化部份</param>
        /// <param name="toEmail">发送给XXXX的Email(也叫接收者的邮件地址)</param>
        /// <returns></returns>
        public static string SendEmail(string context, string toEmail)
        {
            //if (mailToArray == null || mailToArray.Length == 0) return "发送失败,收件人为空!";
            //"sender,pwd,serverHost(服务器地址smtp.qq.com),Port(端口号),subject(主题)"
            string emailSetting = ConfigurationManager.AppSettings["sendEmail"].ToString();
            string settingContent = ConfigurationManager.AppSettings["sendContext"].ToString(); // 格式为:"您好!您……………………{0}……"
            context = string.Format(settingContent, context);   // 格式化上面的要变{0}的内容 如果发的是不变的内容就不要该代码
            if (string.IsNullOrEmpty(emailSetting)) return "配置错误";
            string[] arr = emailSetting.Split(',');
            if (arr.Length != 4) return "配置错误";
            string sender = arr[0];     // 发送人邮件地址
            string password = arr[1];   // 发送人邮件PWD
            string Server = arr[2];    // 发送人邮件服务器地址
            //int Port=0;
            //if (!int.TryParse(arr[3], out Port)) return "邮件服务器端口号配置错误";      // 发送人邮件服务器地址端口号可以不写
            string Subject = arr[3];    // 邮件主题
            //使用指定的邮件地址初始化MailAddress实例
            MailAddress maddr = new MailAddress(sender,"雷先生");  // 这里第二个参数可以写成你想显示的!
            //初始化MailMessage实例
            MailMessage myMail = new MailMessage();
            //向收件人地址集合添加邮件地址
            //if (mailToArray != null)
            //{
            //    for (int i = 0; i < mailToArray.Length; i++)
            //    {
            //        myMail.To.Add(mailToArray[i].ToString());
            //    }
            //}
            myMail.To.Add(toEmail);     // 如果用批量 注释这一行,用上面的for添加邮件地址
            //向抄送收件人地址集合添加邮件地址
            //if (mailCcArray != null)
            //{
            //    for (int i = 0; i < mailCcArray.Length; i++)
            //    {
            //        myMail.CC.Add(mailCcArray[i].ToString());
            //    }
            //}
            myMail.CC.Add(toEmail);    // 如果用批量 注释这一行,用上面的for添加抄送邮件地址
            //发件人地址
            myMail.From = maddr;
            //电子邮件的标题
            myMail.Subject = Subject;
            //电子邮件的主题内容使用的编码
            myMail.SubjectEncoding = Encoding.UTF8;
            //电子邮件正文
            myMail.Body = context;
            //电子邮件正文的编码
            myMail.BodyEncoding = Encoding.Default;
            myMail.Priority = MailPriority.High;
            myMail.IsBodyHtml = true;
            //在有附件的情况下添加附件
            // try
            // {
            //     if (attachmentsPath != null && attachmentsPath.Length > 0)
            //     {
            //         Attachment attachFile = null;
            //         foreach (string path in attachmentsPath)
            //         {
            //            attachFile = new Attachment(path);
            //            myMail.Attachments.Add(attachFile);
            //        }
            //      }
            //}
            //catch (Exception err)
            //{
            //   throw new Exception("在添加附件时有错误:" + err);
            //}
            SmtpClient smtp = new SmtpClient();
            //指定发件人的邮件地址和密码以验证发件人身份
            smtp.Credentials = new NetworkCredential(sender, password);
            //smtp.UseDefaultCredentials = true;这句不要,否则发不出,一定要注意!!!!!!!!!!!!!!!!!!!!!!!!!
            smtp.EnableSsl = true;
            smtp.DeliveryMethod = SmtpDeliveryMethod.Network;                 //设置SMTP邮件服务器
            smtp.Host = Server;
            // smtp.EnableSsl = true;
            //smtp.Port = 587;
            try
            {
                //将邮件发送到SMTP邮件服务器
                smtp.Send(myMail);
                return "成功";
            }
            catch (System.Net.Mail.SmtpException ex)
            {
                return "失败";
            }

        }

    KO,就这样,可以根据需要改动!

posted @ 2016-04-19 21:38  酒沉吟  阅读(291)  评论(0编辑  收藏  举报