唉!近来特么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,就这样,可以根据需要改动!