zoukankan      html  css  js  c++  java
  • 老话题之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,就这样,可以根据需要改动!

  • 相关阅读:
    UVA 1513
    《ArcGIS Runtime SDK for Android开发笔记》——问题集:.geodatabase创建,创建时内容缺失问题总结
    《ArcGIS Runtime SDK for Android开发笔记》——问题集:使用TextSymbol做标注显示乱码
    《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用
    《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析
    《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)
    《ArcGIS Runtime SDK for Android开发笔记》——(4)、基于Android Studio构建ArcGIS Android开发环境
    《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述
    《ArcGIS Runtime SDK for Android开发笔记》——(2)、Android Studio基本配置与使用
    《ArcGIS Runtime SDK for Android开发笔记》——(1)、Android Studio下载与安装
  • 原文地址:https://www.cnblogs.com/yingger/p/5410269.html
Copyright © 2011-2022 走看看