C#實現簡單郵件發送代碼如下
public static void SendAsync(string emailTo, string subject, string mailBody) { var msg = new MailMessage(); msg.To.Add(emailTo); // msg.From = new MailAddress(_userNameForEmail, "顯示的發件人名稱", System.Text.Encoding.UTF8); msg.Subject = subject;//郵件標題 msg.SubjectEncoding = System.Text.Encoding.UTF8; msg.Body = mailBody;//郵件內容 msg.BodyEncoding = System.Text.Encoding.UTF8; msg.IsBodyHtml = false; msg.Priority = MailPriority.High;//郵件優先級 // var client = new SmtpClient(); client.UseDefaultCredentials = false; client.Credentials = new NetworkCredential(_userNameForEmail, _passwordForEmail); // client.Host = _smtpHost; try { //簡單一點兒可以client.Send(msg); client.Send(msg); //Task.Factory.StartNew(() => //{ // client.Send(msg); //}); //client.SendAsync(msg, userState); } catch (SmtpException ex) {
log.Error(ex); throw ex; } }
當傳入發送郵箱正確的用戶名和密碼時,總是收到到:郵箱不可用. has no permission 這樣的錯誤,英文錯誤為:Mailbox unavailable. The server response was: User has no permission。
其實我們用.Net發送郵件時相當於自定義客戶端根據用戶名和密碼進行登錄,然后使用SMTP服務發送郵件。但新注冊的163郵件默認是不開啟客戶端授權驗證的(對自定的郵箱大師客戶端默認開啟),
因此登錄總是會被拒絕,驗證沒有權限。解決辦法是進入163郵箱,進入郵箱中心——客戶端授權密碼,選擇開啟即可,如下截圖
設置完畢后,在代碼中用使用客戶端授權密碼代替原始的郵箱密碼,這樣就可以正確的發送郵件了。