項目中需要對異常,發送郵件到管理員郵箱
發送時候會卡死一段時間
如何發送呢?
1、首先在QQ郵箱當中開啟“POP3/SMTP服務”
這里有個東西需要開啟,拿到授權碼,而不是用qq密碼明文的方式展示出來
溫馨提醒:為了你的帳戶安全,更改QQ密碼以及獨立密碼會觸發授權碼過期,需要重新獲取新的授權碼登錄。
https://service.mail.qq.com/cgi-bin/help?subtype=1&&no=1001256&&id=28
手機發送“配置郵箱客戶端”,之后就可以彈出這個授權碼頁面
這里說的一般的騰訊郵箱指的的是@qq.com這樣的郵箱,在程序里需要配置如下:
SMTP服務器: ssl://smtp.qq.com
端口:465或587
用戶名和密碼:自己的郵箱號和密碼
本文來源於:牛超個人博客(大超小志)
原文標題: 解決騰訊企業郵箱smtp.exmail.qq.com發郵件錯誤
原文鏈接:http://niuchao.com/technology/668
實現代碼:
發送人,收件人,都是一樣的
//發件人地址 MailAddress from = new MailAddress("824478152@qq.com"); MailMessage message = new MailMessage(); message.Body = "this is a test"; message.IsBodyHtml = true; message.BodyEncoding = System.Text.Encoding.UTF8; //收件人地址 message.To.Add("824478152@qq.com"); message.Subject = "hello !"; message.SubjectEncoding = System.Text.Encoding.UTF8; message.From = from; SmtpClient client = new SmtpClient(); client.EnableSsl = true; client.Host = "smtp.qq.com"; client.Port = 587; //郵箱賬戶和密碼 client.Credentials = new System.Net.NetworkCredential("824478152@qq.com", "授權碼"); try { client.Send(message); } catch (Exception ex) { string mssage = ex.ToString(); }
程序中的拋異常發郵件過程
之前發送異常會卡死程序很久,以為是數據庫回滾的問題,排查下來是,郵件提醒功能,發送失敗造成的
Service服務中throw;
BLL中throw,彈出異常
HandlerErrorAttribute--
public override void OnException(ExceptionContext context)-----》WriteLog(context);
private void WriteLog(ExceptionContext context)----》SendMail(string body)
private void SendMail(string body)-----》Config.GetValue("ErrorToMail").ToBool()----true--》MailHelper.Send("824478152@qq.com", SystemName + " - 發生異常", body.Replace("-", ""));
public class MailHelper
public static bool Send(string to, string subject, string body, string encoding = "UTF-8", bool isBodyHtml = true, bool enableSsl = false)
/// <summary> /// 同步發送郵件 /// </summary> /// <param name="to">收件人郵箱地址</param> /// <param name="subject">主題</param> /// <param name="body">內容</param> /// <param name="encoding">編碼</param> /// <param name="isBodyHtml">是否Html</param> /// <param name="enableSsl">是否SSL加密連接</param> /// <returns>是否成功</returns> public static bool Send(string to, string subject, string body, string encoding = "UTF-8", bool isBodyHtml = true, bool enableSsl = false) { try { MailMessage message = new MailMessage(); // 接收人郵箱地址 message.To.Add(new MailAddress(to)); message.From = new MailAddress(MailUserName, MailName); message.BodyEncoding = Encoding.GetEncoding(encoding); message.Body = body; //GB2312 message.SubjectEncoding = Encoding.GetEncoding(encoding); message.Subject = subject; message.IsBodyHtml = isBodyHtml; SmtpClient smtpclient = new SmtpClient(MailServer, 587); smtpclient.Credentials = new System.Net.NetworkCredential(MailUserName, MailPassword); //SSL連接 smtpclient.EnableSsl = enableSsl; smtpclient.Send(message); return true; } catch (Exception ex) { Console.WriteLine(ex.ToString()); return false; } }