C#發送郵件(阿里企業郵箱示例 包括各個類型的服務器及端口配置)

本文講解通過C#來實現發送郵件:
1.我這裏是使用的阿里企業郵箱,至於其他的163和QQ郵箱,就是修改下服務器地址和端口的問題
2.至於發送失敗的問題,在排除代碼問題之後,可以看下自己使用的發送郵箱的賬戶是否開啓了授權,特別是163和QQ郵箱,要開授權的

 

這裏針對阿里企業郵箱的各個服務器和端口配置說明一下:
1.POP服務器:
地址:pop3.mxhichina.com
端口:110
加密端口:995

2.IMAP服務器:
地址:imap.mxhichina.com
端口:143
加密端口:993
備註:接收郵件推薦使用該協議,畢竟POP3是無法和郵箱服務器進行交互的,不能更新郵件的狀態。

SMTP服務器:
地址:smtp.mxhichina.com
端口:25
加密端口:465

 

直接上核心代碼:

        /// <summary>
        /// 發送郵件方法,更多可以自己轉到定義去查看,還是很通俗易懂的
        /// </summary>
        /// <param name="requestModel"></param>
        public static void SendEmail(EmailInfo requestModel)
        {
            if (requestModel.To.IsNullOrEmpty()) throw new LevoxCpcException("郵件收件人不能爲空!");
            if (string.IsNullOrWhiteSpace(requestModel.Subject)) throw new LevoxCpcException("郵件標題不能爲空!");
            if (string.IsNullOrWhiteSpace(requestModel.Body) && requestModel.Attachments.IsNullOrEmpty()) throw new LevoxCpcException("沒有要發送的郵件內容!");

            var emailSettingInfo = GetSendEmailSenderInfo();
            try
            {
                //初始化發送郵件對象
                var client = new SmtpClient(emailSettingInfo.Host, emailSettingInfo.Port)
                {
                    //是否啓用SSL,這裏是false,如果true,需要配置證書
                    EnableSsl = false,
                    //是否啓用身份驗證(UseDefaultCredentials屬性必須要在Credentials前配置,否則會報錯)
                    UseDefaultCredentials = true,
                    //配置身份賬號密碼
                    Credentials = new NetworkCredential(emailSettingInfo.Account, emailSettingInfo.Password)
                };
                //要發送的郵件對象
                var email = new MailMessage()
                {
                    //發件人郵箱和展示名稱
                    From = new MailAddress(emailSettingInfo.Account, emailSettingInfo.DisplayName),
                    IsBodyHtml = true,//是否是html格式
                    Subject = requestModel.Subject,//郵件標題
                    BodyEncoding = Encoding.Default,//郵件內容編碼
                    Body = requestModel.Body,//郵件內容
                    Priority = MailPriority.High//郵件優先級
                };
                //收件人(可以多個)
                requestModel.To.Distinct().LingbugFor(r => email.To.Add(r));
                //抄送人(可以多個)
                if (!requestModel.CC.IsNullOrEmpty()) requestModel.CC.Distinct().LingbugFor(r => email.CC.Add(r));
                //附件(可以多個)
                if (!requestModel.Attachments.IsNullOrEmpty()) requestModel.Attachments.Distinct().LingbugFor(r => email.Attachments.Add(new Attachment(r)));
                //發送完畢事件(只針對異步發送有效)
                client.SendCompleted += (sender, e) =>
                {
                    if (e.Error == null)
                    {
                        LogTestService.Info("郵件發送成功", requestModel.SerializeObject());
                    }
                    else
                    {
                        LogTestService.Info("郵件發送失敗:" + e.Error.Message, e.Error.SerializeObject());
                    }
                };
                //發送郵件
                client.SendMailAsync(email);
            }
            catch (Exception ex)
            {
                LogTestService.Info("發送郵件發生異常:" + ex.Message, ex.SerializeObject());
            }
        }

 

 

Ending~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章