一、要使用程序來發送郵件,以下幾個信息必不可少
Smtp服務器:發送郵件的服務器,如常見的smtp.163.com、smtp.qq.com,不同的服務商,發送郵件的服務器也不相同
賬號:發送郵件的郵箱賬號
密碼:郵箱密碼或授權碼(注:當你在程序中使用郵箱密碼進行發郵件,發現無法發送等問題,就要考慮郵箱是否開啟了SMTP權限,是不是需 要使用授權碼進行發郵件,像qq、163郵箱,這些郵箱是需要先開啟SMTP發送郵件的權限,當開啟后,會產生一個授權碼,這時第三方就可以使用郵件賬號加授權碼來實現發送郵件功能)
端口:默認端口25 加密端口一般是 465端口,如果不對,請自行百度查詢
二、為什么要加密發送郵件
阿里雲為了反垃圾郵件,25端口是封掉的,也就是說,如果你要使用阿里服務器發送郵件,25端口是走不通的,必須使用其他端口發送郵件,
這個時候就要用到加密端口發送郵件。如果你的項目有發送郵件的功能,且在測試服務器上發郵件是正常的,部署到阿里雲之后就不行了,
這個時候就要想到是不是服務器端口的問題。
三、郵件發送限制
1、發送的郵件,可能會被接收方的郵件系統當做垃圾郵件攔截。
2、程序發送郵件的速度很快的,如果在短時間內發送大量郵件,可能會被當前郵箱所在服務器攔截(郵件發送頻率太高)具體限制詳情,要 咨詢郵件服務器的管理人員。
3、單個郵箱單日發送大量郵件,很有可能發送失敗,理論上每個郵箱所在服務器都會有單日發送郵件數量的限制,具體限制是多少,要咨詢 郵件服務器的管理人員。
四、發送郵件的函數
1、基於System.Net.Mail.MailMessage 發送郵件
/// <summary>
/// 發送郵件
/// </summary>
/// <param name="email">收件人郵箱</param>
/// <param name="title">標題</param>
/// <param name="content">發送內容</param>
/// <returns></returns>
public static bool SendEmail(string email,string title,string content)
{
string _smtpServer = "smtp.163.com"; //SMTP服務器
string _userName = "test@163.com"; //郵箱
string _pwd = "test"; //密碼或授權碼
if(_smtpServer == "" || _userName == "" || _pwd == "") {
return false;
}
using(System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage()) {
/*
* msg.To.Add("b@b.com");可以發送給多人
*/
msg.To.Add(email); //設置收件人
/*
* msg.CC.Add("c@c.com");
* msg.CC.Add("c@c.com");可以抄送給多人
*/
/* 3個參數分別是 發件人地址(可以隨便寫),發件人姓名,編碼*/
msg.From = new MailAddress(_userName,_userName,System.Text.Encoding.UTF8);
msg.Subject = title; //郵件標題
msg.SubjectEncoding = System.Text.Encoding.UTF8; //郵件標題編碼
msg.Body = content; //郵件內容
msg.BodyEncoding = System.Text.Encoding.UTF8;//郵件內容編碼
msg.IsBodyHtml = true; //是否是HTML郵件
msg.Priority = MailPriority.Normal; //郵件優先級
SmtpClient client = new SmtpClient(_smtpServer,587); //郵件服務器地址及端口號
client.EnableSsl = true; //ssl加密發送
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
client.Credentials = new System.Net.NetworkCredential(_userName,_pwd); //郵箱賬號 密碼
client.Timeout = 6000; //6秒超時
try {
client.Send(msg); //發送郵件
client.Dispose(); //釋放資源
return true;
} catch(System.Net.Mail.SmtpException ex) {
return false;
}
}
}
缺點:最近發現該方法不支持163郵箱加密發送,為此在網上找了很久,最終發現System.Net.Mail只支持顯式SSL(ExplicitSSL),但是不支持隱式SSL(Implicit SSL),所以會造成163郵箱發送超時的問題,其他郵箱可能也有同樣的問題,需要自行測試,如碰到163郵箱加密發送發送超時問題,可以使用下面的發送郵件函數來解決。
2、基於System.Web.Mail 發送郵件(用於解決163郵箱加密發送超時問題,該函數微軟已棄用,如果不是特殊情況,不推薦使用該函數)
/// <summary>
/// 發送郵件
/// </summary>
/// <param name="emails">收件人的郵箱</param>
/// <param name="title">郵件標題</param>
/// <param name="content">郵件內容(支持Html)</param>
public static bool SendEmailBack(List<string> emails,string title,string content)
{
string _smtpServer = "smtp.163.com"; //發郵件smtp服務器名稱
string _userEmail = "test@163.com"; //發送人郵箱地址
string _pwd = "test"; //發郵件郵箱的密碼或授權碼
System.Web.Mail.MailMessage _msg = new System.Web.Mail.MailMessage();
//郵件主題
_msg.Subject = title;
_msg.BodyFormat = System.Web.Mail.MailFormat.Html;
//郵件正文
_msg.Body = content;
//正文編碼
_msg.BodyEncoding = Encoding.UTF8;
//優先級
_msg.Priority = System.Web.Mail.MailPriority.Normal;
//發件者郵箱地址
_msg.From = _userEmail;
//收件人收箱地址
string _toEmail = "";
emails.ForEach(s => { _toEmail += s + ","; });
//_msg.Cc = _toEmail.TrimEnd(','); //抄送
_msg.To = _toEmail.TrimEnd(','); //收件人
_msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate","1");
//用戶名
_msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername",_userEmail);
//密碼
_msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword",_pwd);
//端口
_msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport",465);
//是否ssl
_msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl",true);
//Smtp服務器
System.Web.Mail.SmtpMail.SmtpServer = _smtpServer;
try {
System.Web.Mail.SmtpMail.Send(_msg);
return true;
} catch(SmtpException e) {
return false;
}
}
總結:
163郵箱使用SSL端口發送時出現異常:操作超時,查了好久,發現是因為:System.Net.Mail只支持顯式SSL(ExplicitSSL),但是不支持隱式SSL(Implicit SSL),此問題似乎可以用System.Web.Mail或Cdosys.dll解決,System.Web.Mail 測試下來是可以使用的,Cdosys.dll沒有用過。
顯式SSL通過25端口連接 -> StartTLS(開始加密)-> 驗證 -> 發送數據
隱式SSLStartSSL(開始加密) -> 連接 -> 驗證 -> 發送數據
以上內容僅為個人見解
總結摘抄自:https://zhaoqi.vip/3123403799.html 感興趣的同學可以看一下
