demoshop

demo, trying to be the best_

demo 已經很久沒有使用 Gmail 的 SMTP 來做測試了(詳見如何在本機測試寄送郵件程式是否撰寫正確)但最近在備課的時候為了讓學員方便一起做所以還是準備了使用 Gmail 寄信的範例,使用的就是萬年不變的簡易寄送方式(如何使用Gmail幫我們發信),萬年不變的是程式碼,但是結果卻是變了....一直收到 Gmail 回傳 SMTP 伺服器需要安全連接,或用戶端未經驗證。奇了!我明明就有設定 SSL 也確定帳號和密碼絕對沒錯,到底是在沒驗證啥哩。

先給來看一下寄信的程式碼是如此的平凡

using (var mySmtp =
    new System.Net.Mail.SmtpClient("smtp.gmail.com", 587))
{
    mySmtp.Credentials =
        new System.Net.NetworkCredential("OOXX@gmail.com", "密碼就是密碼");

    mySmtp.EnableSsl = true;

    mySmtp.Send("OOXX@gmail.com",
    "收件者",
    "主旨",
    "內容");
}

 

按下發送後就得到

SMTP 伺服器需要安全連接,或用戶端未經驗證。 伺服器回應為: 5.5.1 Authentication Required. Learn more at

 

後來才想到基於安全的理由 demo 已經很早就把 Gmail 的二階段驗證開啟了,請注意當開啟了「二階段驗證」後,就無法直接使用原始密碼當作 SMTP 的密碼,因為你的程式無法讓使用者輸入「二階段驗證」的驗證碼,所以永遠都是用戶端未經驗正的狀態,如果已經開啟二階段驗證,並且還是需要使用 Gmail 充當 SMTP 的朋友可以依據以下步驟,開啟「應用程式密碼」

 

請進入 Google 帳號管理 https://myaccount.google.com/

一直往下拉可以看到「登入」的區塊,我們要找的「應用程式密碼」也在其中,請點選「應用程式密碼」的文字

Google應該會要求您再次輸入密碼,輸入完畢後就可以產生一組應用程式密碼

應用程式密碼產生完成,您會看到專屬的密碼,請不要用任何方式記憶這組密碼,直接複製起來就好

 

這時回到您剛剛的寄信程式,將密碼改成這組「應用程式密碼」後就可以正常的使用 Gmail SMTP 幫我們寄信了。

 

應用程式密碼不只是使用在這樣的情境,任何無法接受二階段驗證的應用程式都可以利用產生應用程式密碼的方式來解決,如果你還沒有開啟 Google 的二階段驗證就快去開吧(看上面的圖就知道 demo 三年前就開了),雖然開了以後很麻煩,但安全和方便本來就永遠都是反方向的。

 

 

回應討論