本文講解通過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~