參考google的「Set up POP in mail clients」,smtp 要使用 TSL,而 Port 可使用 587 。
於是使用以下簡單的Code來測試,
01 |
var client = new SmtpClient( "smtp.gmail.com" , 587) |
02 |
{ |
03 |
EnableSsl = true, |
04 |
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network, |
05 |
UseDefaultCredentials = false, |
06 |
Credentials = new NetworkCredential( "你的google帳號" , "密碼" ) |
07 |
}; |
08 |
09 |
client.Send( "測試信<rm@gmail.com>" , "rainmaker_ho@gss.com.tw" , "test" , "testbody" ); |
10 |
Console.WriteLine( "Sent" ); |
11 |
Console.ReadLine(); |
結果卻出現「SMTP 伺服器需要安全連接,或用戶端未經驗證。」的錯誤,如下,
System.Net.Mail.SmtpException was unhandled
_HResult=-2146233088
_message=SMTP 伺服器需要安全連接,或用戶端未經驗證。 伺服器回應為: 5.5.1 Authentication Required. Learn more at
HResult=-2146233088
IsTransient=false
Message=SMTP 伺服器需要安全連接,或用戶端未經驗證。 伺服器回應為: 5.5.1 Authentication Required. Learn more at
Source=System
StackTrace:
於 System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode statusCode, String response)
於 System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, MailAddress from, Boolean allowUnicode)
於 System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, Boolean allowUnicode, SmtpFailedRecipientException& exception)
於 System.Net.Mail.SmtpClient.Send(MailMessage message)
於 System.Net.Mail.SmtpClient.Send(String from, String recipients, String subject, String body)
方法一 :
後來在網路上發現有人說要調整「安全性較低的應用程式存取權限」為「啟用」(預設是「停用」)。 請直接點 安全性較低的應用程式存取權限 去設定
設定「啟用」後,再執行一次程式就可以正常送出了哦!
測試時,使用 Port 25 ,也可以通哦!
方法二 :
請進入 Google 帳號管理 https://myaccount.google.com/
一直往下拉可以看到「登入」的區塊,我們要找的「應用程式密碼」也在其中,請點選「應用程式密碼」的文字
Google應該會要求您再次輸入密碼,輸入完畢後就可以產生一組應用程式密碼
應用程式密碼產生完成,您會看到專屬的密碼,請不要用任何方式記憶這組密碼,直接複製起來就好
這時回到您剛剛的寄信程式,將密碼改成這組「應用程式密碼」後就可以正常的使用 Gmail SMTP 幫我們寄信了。
應用程式密碼不只是使用在這樣的情境,任何無法接受二階段驗證的應用程式都可以利用產生應用程式密碼的方式來解決,如果你還沒有開啟 Google 的二階段驗證就快去開吧(看上面的圖就知道 demo 三年前就開了),雖然開了以後很麻煩,但安全和方便本來就永遠都是反方向的。
留言列表