[ C# 開發隨筆 ] Gmail SMTP發信 ~無法採用低安全性登入後的修正~

最近 Google 在5/30 之後關閉了低安全性登入的應用程式存取,所以有些透過gmail 發信的服務可能會發生錯誤,我是跳出下列的錯誤[The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Authentication Required.]這邊記錄一下解決方法。

修正安全性問題

首先,先去發信帳號的安全性設定,接著找到登入的位置

第一步,先開啟這帳號的兩步驟驗證,開啟這個就不特別說明了。

第二步,點選下方的的應用程式密碼,通常會要你再輸入一次密碼,然後就會看到下圖。

上圖紅框的地方,選取應用程式跟裝置,接著按下產生。就會產生下圖的密碼,把這密碼複製起來準備到程式裏面用。

點選完成後就會看到,多了一個應用程式密碼。

最後拿著密碼去程式碼裏面把原本的密碼換掉,就可以正常的寄信了。


如果是第一次串接 Gmail 發信,請看下列程式碼~

    public class GMailAdapter
    {
        public void SendMail(string emails, string title, string content, string paths)
        {
            var mail = new MailMessage();

            // 收件人 Email 地址
            foreach (var email in emails.Split(','))
            {
                mail.To.Add(email);
            }
            // 主旨
            mail.Subject = title;
            // 內文
            mail.Body = content;
            // 內文是否為 HTML
            mail.IsBodyHtml = true;
            // 優先權
            mail.Priority = MailPriority.Normal;

            // 發信來源,最好與你發送信箱相同,否則容易被其他的信箱判定為垃圾郵件.
            mail.From = new MailAddress("SenderEmail@gmail.com", "Sender Name");

            // 附加檔案,如果沒有附加檔案不用這一趴
            foreach (var path in paths.Split(','))
            {
                Attachment attachment = new Attachment(path);
                mail.Attachments.Add(attachment);
            }

            // Gmail 的 SMTP 設定
            var smtp = new SmtpClient("smtp.gmail.com", 587)
            {
                Credentials = new System.Net.NetworkCredential("SenderEmail", "應用程式密碼放這"),
                EnableSsl = true
            };

            // 投遞出去
            smtp.Send(mail);

            mail.Dispose();
        }
    }

以上就是本次的筆記,雖然把密碼放在程式碼裏面不是太好的事情,但難免會有這種需要便宜行事的時候,有需要的人再自行取捨。

如有指正之處,歡迎隨時提出