最近在做一個通過點擊忘記密碼往用戶郵箱中發郵件(郵件內容是一個超鏈接)點擊進行修改的功能,發送原理,我們只是把郵件發送給smtp服務器,然后再由smtp服務器發送到郵箱,發送之前要校驗一下。
1、微軟已經幫我們封裝好了發送郵件的類 MailMessage,MailMessage類構造一些郵件信息,然后通過SmtpClient進行郵件發送。MailMessage常用的一些屬性有:
1.1、From:發件人郵箱地址。
1.2、To:收件人的郵箱地址。
1.3、Subject:郵件標題。
1.4、Body:郵件內容。
2、還需要用到SmtpClient類進行發送郵件。SmtpClient類的意思是:允許應用程序使用簡單郵件傳輸協議 (SMTP) 來發送電子郵件。SmtpClient類常用的一些屬性和方法:
2.1、Host: 獲取或設置用於 SMTP 事務的主機的名稱或 IP 地址。
2.2、EnableSsl:是否使用安全套接字層加密連接。
2.3、UseDefaultCredentials:是否隨請求一起發送。
2.4、Credentials:獲取或設置用於驗證發件人身份的憑證。
2.5、Send():發送。
3、上代碼。
protected void Page_Load(object sender, EventArgs e)
{
//實例化一個發送郵件類。
MailMessage mailMessage = new MailMessage();
//發件人郵箱地址,方法重載不同,可以根據需求自行選擇。
mailMessage.From = new MailAddress("123456@qq.com");
//收件人郵箱地址。
mailMessage.To.Add(new MailAddress("654321@qq.com"));
//郵件標題。
mailMessage.Subject = "發送郵件測試";
//郵件內容。
mailMessage.Body = "這是我給你發送的第一份郵件哦!";
//實例化一個SmtpClient類。
SmtpClient client = new SmtpClient();
//在這里我使用的是qq郵箱,所以是smtp.qq.com,如果你使用的是126郵箱,那么就是smtp.126.com。
client.Host = "smtp.qq.com";
//使用安全加密連接。
client.EnableSsl = true;
//不和請求一塊發送。
client.UseDefaultCredentials = false ;
//驗證發件人身份(發件人的郵箱,郵箱里的生成授權碼);
client.Credentials = new NetworkCredential("123456@qq.com", "fnsedjxib");
//發送
client.Send(mailMessage);
Context.Response.Write("發送成功");
}
4、常見錯誤信息及解決辦法。
在做此功能的過程中,遇到過好幾個異常信息,到最后百度了一下,總算解決了,有些新人在做的過程中,或許不知道問題出在哪了,接下來我就說說我常見的錯誤及解決辦法。
4.1、mail from address must be same as authorization user
一般出這種情況的原因有兩種:
4.1.1、POP3/IMAP/SMTP未開啟。
解決辦法:進入qq郵箱- - - - -》設置- - - - -》賬戶- - - - -》然后找到POP3/IMAP/SMTP開啟即可。

4.1.2、授權碼錯誤。
解決辦法:進入qq郵箱- - - - -》設置- - - - -》賬戶- - - - -》然后找到POP3/IMAP/SMTP開POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務下的生成授權碼填上即可。
4.2、Error: need EHLO and AUTH first !
一般情況系出現這種錯誤原因是SmtpClient類的EnableSsl、UseDefaultCredentials屬性放到了Credentials屬性之下。
解決辦法:將SmtpClient類的EnableSsl、UseDefaultCredentials屬性放到了Credentials屬性之上。
5、然后根據自己構建的鏈接就可以找回密碼了。
轉載自:https://www.cnblogs.com/xiezunxu/articles/7421322.html
