1. 程式人生 > WINDOWS開發 >c#發qq郵箱,QQ郵箱當中開啟“POP3/SMTP服務”獲取授權碼

c#發qq郵箱,QQ郵箱當中開啟“POP3/SMTP服務”獲取授權碼

專案中需要對異常,傳送郵件到管理員郵箱

傳送時候會卡死一段時間

如何傳送呢?

技術分享圖片

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("[email protected]");
            MailMessage message = new MailMessage();
            message.Body 
= "this is a test"; message.IsBodyHtml = true; message.BodyEncoding = System.Text.Encoding.UTF8; //收件人地址 message.To.Add("[email protected]"); 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("[email protected]","授權碼"); 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("[email protected]",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;
            }
        }