簡體   English   中英

Gmail 錯誤:SMTP 服務器需要安全連接或客戶端未通過身份驗證。 服務器響應是:5.5.1 Authentication Required

[英]Gmail Error :The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required

我正在使用以下代碼發送電子郵件。 該代碼在我的本地機器上正常工作。 但是在生產服務器上我收到錯誤消息

var fromAddress = new MailAddress("mymailid@gmail.com");
var fromPassword = "xxxxxx";
var toAddress = new MailAddress("yourmailid@yourdoamain.com");

string subject = "subject";
string body = "body";

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)       
};

using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})

smtp.Send(message);

在我的 Gmail A/c 上,從生產服務器運行代碼后,我收到了以下電子郵件

你好 ,

最近有人使用您的密碼嘗試登錄您的 Google 帳戶 mymailid@gmail.com。 此人正在使用電子郵件、客戶端或移動設備等應用程序。

我們阻止了登錄嘗試,以防這是試圖訪問您帳戶的劫持者。 請查看登錄嘗試的詳細信息:

2014 年 1 月 3 日星期五 13:56:08 點 UTC IP 地址:xxx.xx.xx.xxx (abcd.net.) 地點:Philadelphia PA, Philadelphia, PA, USA

如果您無法識別此登錄嘗試,則其他人可能正在嘗試訪問您的帳戶。 您應該立即登錄您的帳戶並重置密碼。

重設密碼

如果這是您本人,並且您無法訪問自己的帳戶,請完成http://support.google.com/mail?p=client_login中列出的故障排除步驟

此致 Google 帳戶小組敬上

當您嘗試從代碼發送郵件並發現錯誤“SMTP 服務器需要安全連接或客戶端未通過身份驗證。服務器響應為:5.5.1 需要身份驗證”時,可能由於以下情況而發生該錯誤。

案例一:密碼錯誤時

案例2:當您嘗試從某個應用程序登錄時

案例3:當您嘗試從您的時區/域/計算機以外的域登錄時(在大多數情況下從代碼發送郵件時都是這種情況)

每個人都有一個解決方案

案例一的解決方法:輸入正確的密碼。

案例 2 的解決方案 1 :通過以下鏈接訪問安全設置https://www.google.com/settings/security/lesssecureapps並啟用不太安全的應用程序。 這樣您就可以從所有應用程序登錄。

案例 2 的解決方案 2 :(請參閱https://stackoverflow.com/a/9572958/52277 )啟用雙因素身份驗證(也稱為兩步驗證),然后生成應用程序專用密碼。 使用新生成的密碼通過 SMTP 進行身份驗證。

案例 3 的解決方案 1:(這可能會有所幫助)您需要查看活動。 但由於最新的安全標准,查看活動將無濟於事,該鏈接將無用。 所以試試下面的案例。

案例 3 的解決方案 2 :如果您將代碼托管在生產服務器上的某處並且您可以訪問生產服務器,則將遠程桌面連接到生產服務器並嘗試從生產服務器的瀏覽器登錄一次。 這將為登錄谷歌添加例外,您將被允許從代碼登錄。

但是,如果您無權訪問生產服務器怎么辦。 嘗試解決方案 3

案例 3 的解決方案 3:您必須為您的 google 帳戶啟用從其他時區/ip 登錄。

為此,請點擊鏈接https://g.co/allowaccess並通過單擊繼續按鈕允許訪問。

就是這樣。 干得好。 現在,您將能夠從任何一台計算機和任何應用程序登錄到您的谷歌帳戶。

當您嘗試從不同的時區或 IP 地址計算機登錄時,通常會發生這種情況。 您的生產服務器和您使用的郵件 ID 都在不同的時區。 選擇以下兩種解決方案之一:

1)通過遠程訪問登錄生產服務器,並使用您的憑據登錄一次gmail。 他們將要求確認,確認並注銷。

或 2) 將 gmail 登錄到您的本地計算機,點擊此鏈接並選擇查看此活動並采取適當的措施。

2022 年更新

此方法不再有效

在此處輸入圖像描述

原始答案

這是一個安全問題。 默認情況下,Gmail 會阻止自定義應用程序訪問您的電子郵件帳戶。 您可以將其設置為接受來自您的應用程序的登錄。

登錄您的電子郵箱后,點擊這里

這將帶您到以下頁面

不太安全的應用程序頁面

今天花了幾個小時在這里嘗試每個解決方案后,我仍然無法克服這個確切的錯誤。 我以這種方式使用了 gmail 很多次,所以我知道這很愚蠢,但我沒有解決這個問題。 我終於在我的案例中偶然發現了解決方案,所以我想我會分享。

首先,上面的大多數答案也是必需的,但就我而言,在創建SmtpClient類時對代碼進行排序是一件簡單的事情。

在下面的第一個代碼片段中,請注意Credentials = creds行的位置。 即使您正確設置了其他所有內容,此實現也會生成此問題中引用的錯誤。

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    Credentials = creds,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
}

但是,如果您將 Credentials setter 調用移至底部,則電子郵件將正確發送。 我沒有對周圍的代碼進行任何更改...即...用戶名/密碼等。顯然, EnableSSL, UseDefaultCredentials, or the DeliveryMethod取決於首先設置的Credentials ...我沒有測試所有弄清楚它是哪一個。

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
    Host = Emailer.Host,
    Port = Emailer.Port,
    EnableSsl = Emailer.RequireSSL,
    UseDefaultCredentials = false,
    DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
    Credentials = creds
}

希望這有助於在將來幫助其他人避免一些頭痛。

您需要從這里打開“允許安全性較低的應用程序” https://myaccount.google.com/lesssecureapps

你好我也有同樣的問題

我做了什么來解決它。 是打開不太安全的應用程序。 連接到我的 gmail 帳戶后。 我輸入了這個鏈接: https ://www.google.com/settings/security/lesssecureapps

然后我打開安全應用程序,它就可以工作了。 上面也說過

我有一個以前工作的代碼現在會拋出這個錯誤。 密碼沒有問題。 也不需要將消息轉換為 base64。 事實證明,我需要執行以下操作:

  1. 關閉兩因素身份驗證
  2. 將“允許不太安全的應用程序”設置為開啟
  3. 從生產服務器登錄到您的 gmail 帳戶
  4. 也去這里批准登錄活動
  5. 在生產服務器中運行您的應用程序

工作代碼

    public static void SendEmail(string emailTo, string subject, string body)
    {
        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("youremail@gmail.com", "secretpassword"),
            EnableSsl = true
        };

        client.Send("youremail@gmail.com", emailTo, subject, body);
    }

關閉兩因素身份驗證關閉兩因素身份驗證

將“允許不太安全的應用程序”設置為開啟(同一頁面,需要滾動到底部) 允許安全性較低的應用

只需按照谷歌電子郵件中的步驟並啟用安全性較低的應用程序即可。

我遇到了同樣的問題。 當您打開兩步驗證 (MFA) 時會發生這種情況。 只需關閉兩步驗證,您的問題就應該得到解決。

下面是我的代碼。我也有同樣的錯誤,但問題是我輸入了錯誤的密碼。下面的代碼將完美運行..試試看

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");             
            mail.From = new MailAddress("fromaddress@gmail.com");
            mail.To.Add("toaddress1@gmail.com");
            mail.To.Add("toaddress2@gmail.com");
            mail.Subject = "Password Recovery ";
            mail.Body += " <html>";
            mail.Body += "<body>";
            mail.Body += "<table>";
            mail.Body += "<tr>";
            mail.Body += "<td>User Name : </td><td> HAi </td>";
            mail.Body += "</tr>";

            mail.Body += "<tr>";
            mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
            mail.Body += "</tr>";
            mail.Body += "</table>";
            mail.Body += "</body>";
            mail.Body += "</html>";
            mail.IsBodyHtml = true;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
            SmtpServer.EnableSsl = true;
            SmtpServer.Send(mail);

你可以參考 我的博客

只需打開 或 gmail 的設置。 見下圖:

在此處輸入圖片說明

對於部署到 Microsoft Azure 的應用程序,我遇到了同樣的問題。

SmtpException:SMTP 服務器需要安全連接或客戶端未通過身份驗證。 服務器響應為:5.5.1 需要身份驗證。

首先,我在以下頁面(以 gmail 用戶身份登錄)上批准了所有未知設備(一些來自愛爾蘭的 IP 地址):https ://security.google.com/settings/u/1/security/secureaccount

我為客戶端使用了以下設置:

var client = new SmtpClient("smtp.gmail.com");
client.Port = 587;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("my_user_name@gmail.com", "my_password"); 

它只有在我在 smtp-client 上設置以下屬性后才開始工作:

client.TargetName = "STARTTLS/smtp.gmail.com";

2022 年 5 月 30 日之后,Gmail 更改了針對使用 google SMTP 發送電子郵件的外部應用程序的政策,以了解詳細信息 Solition是您要發送電子郵件的登錄google帳戶,啟用google兩步驗證並為外部應用程序創建密碼。 詳情

對我有用的是激活不太安全的應用程序的選項(我使用的是 VB.NET)

Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
        Dim mail As New MailMessage()
        Dim SmtpServer As New SmtpClient("smtp.gmail.com")
        mail.From = New MailAddress("from@gmail.com")
        mail.[To].Add("to@gmail.com")
        mail.Subject = "subject"
        mail.Body = body
        Dim attachment As System.Net.Mail.Attachment
        attachment = New System.Net.Mail.Attachment(file_location)
        mail.Attachments.Add(attachment)
        SmtpServer.Port = 587
        SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
        SmtpServer.EnableSsl = True
        SmtpServer.Send(mail)
    End Sub

所以登錄到您的帳戶,然后轉到google.com/settings/security/lesssecureapps

Tomasz Madeyski 的評論解決了我的問題……他說 SetDefaultCredential 上存在一個錯誤,他說:

“問題是在 UseDefaultCredentials setter 中有這個代碼:this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null; 它覆蓋了 Credentials setter 設置的憑據。對我來說,它看起來像 SmtpClient 的錯誤”

如果您在設置憑據之后放置smtpClient.UseDefaultCredentials = false ... 此行設置為 null 這些憑據...

2018 年 11 月,已嘗試上述所有方法,但均未成功。

以下是最終有效的解決方案。 不幸的是,它沒有使用 SSL,但它可以工作!!!

var fromAddress = new MailAddress(asd@asd.com, "From Name");
var toAddress = new MailAddress("tosend@asd.com", "To Name");

const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
{
    Host = "aspmx.l.google.com",
    Port = 25,
    EnableSsl = false
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}

所以正如其他人所說的那樣,自 5 月 30 日起,谷歌不再支持使用第三方應用程序訪問該帳戶。

在此處輸入圖像描述

為了能夠從我的代碼中訪問該帳戶,我必須首先啟用兩步驗證。 在此處輸入圖像描述

完成后,我創建了一個App 密碼 在此處輸入圖像描述

然后我用我用來訪問我的帳戶的密碼替換了生成的密碼。 換句話說,需要使用這個新的應用程序密碼刪除 gmail 帳戶密碼(我們用來登錄到我們的 gmail 的那個),並且該功能重新上線!

我希望這可以幫助別人:-)

Gmail/Google 最近(從 2022 年 5 月起)移除了安全性較低的應用訪問權限。 這就是他們所說的:

為幫助確保您的帳戶安全,自 2022 年 5 月 30 日起,Google 不再支持使用第三方應用或設備,這些應用或設備要求您僅使用您的用戶名和密碼登錄您的 Google 帳戶。

現在,任何直接發送 SMTP 電子郵件的電子郵件發送者都會拋出錯誤“535-5.7.8 用戶名和密碼不被接受”。 這是因為現在 Google 要求輸入應用程序專用密碼,而電子郵件帳戶密碼不是應用程序密碼,因此它們顯示用戶名/密碼不被接受。

您需要創建和使用 App 專用密碼。 應用密碼的作用類似於您帳戶的備用密碼。 它只能由您與之共享的應用程序使用,因此它比共享您的主密碼更安全。

要創建應用專用密碼:

  1. 啟用 2 因素身份驗證。
  2. 轉到 Gmail 的帳戶設置,然后選擇應用程序密碼。
  3. 將其命名為您想要的任何名稱並創建密碼。
  4. 將此新的 16 位密碼與 SMTP 的 gmail 電子郵件一起使用(在密碼處使用此 16 位密碼)

享受發送電子郵件..!!

在此處輸入圖像描述

在此處輸入圖像描述

在此處輸入圖像描述

我嘗試了這里找到的所有建議,從啟用不太安全的應用程序到嘗試端口 587 ......沒有任何效果。 最后我只是注釋掉了UseDefaultCredentials = false這一行。 如果我不碰那個布爾值,一切都會奏效。

您可能需要從 gmail 創建/生成特定的 APP 密碼。 然后,您的應用程序或腳本將使用此新密碼而不是您的常規密碼。 您的常規密碼仍然可以正常使用。

這就是為我做的。 我仍然使用相同的電子郵件帳戶,但必須生成一個新的應用專用密碼。

https://support.google.com/accounts/answer/185833?hl=en

截屏

基本上你可以在這里做到: https ://security.google.com/settings/security/apppasswords

首先,我在 GoDaddy 中購買了域,當我單擊此鏈接https://www.google.com/settings/security/lesssecureapps 時,我沒有選項,它顯示此消息“域管理員管理這些設置” ,所以我轉到管理控制台https://admin.google.com/

有這個選項在此處輸入圖片說明

然后出現我需要的選項在此處輸入圖片說明

我真的看過很多想法,唯一的解決方案是這種方式(與不同的電子郵件提供商一起工作):

            try
        {
            ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
            string host = dsProvider.Rows[y]["POP_hostOut"].ToString();
            int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString());  //587
            string[] email = von1.Split('@');
            string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
            string password = layer.getUserPassword(listSender.SelectedValue.ToString());
            SmtpClient client = new SmtpClient(host, port);
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            //A idea from MSDN but it not works. You got "The server response was: 5.5.1 Authentication Required."
            //System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, host);
            //System.Net.CredentialCache cache = new System.Net.CredentialCache();
            //cache.Add(host, port, "NTLM", myCreds);
            ///cache.GetCredential(host, port, "NTLM");   //NTLM
            client.Credentials = new System.Net.NetworkCredential(userName, password);
            client.Host = host;
            client.Port = port;
            client.EnableSsl = true;
            client.Send(message);
            ViewProgressbar();
        }
        catch (SmtpException ex)...

我是一個面向企業訂閱者的谷歌應用程序,我花了最后幾個小時來處理這個問題,即使在擁有所有正確的設置(smtp、端口、enableSSL 等)之后也是如此。 以下是對我和嘗試發送電子郵件時拋出 5.5.1 錯誤的網站有用的方法:

  1. 登錄您的 admin.google.com
  2. 單擊 SECURITY <-- 如果這不可見,則單擊“更多控制”,然后從列表中添加它
  3. 點擊基本設置
  4. 滾動到“基本設置”框的底部,單擊鏈接:“轉到安全性較低的應用程序的設置”
  5. 選擇選項 #3:強制所有用戶訪問安全性較低的應用程序(不推薦)
  6. 按窗口底部的保存

完成此操作后,我從網站上發送的電子郵件表單又可以正常工作了。 祝你好運!

如果您使用的是 gmail。

  • 1-登錄到您的帳戶

    2-瀏覽此鏈接

    3- 允許不太安全的應用程序:開

享受……

您應該禁止安全性較低的應用訪問您的 Google 帳戶

要做:

https://myaccount.google.com/lesssecureapps

不要在等待 smtp.SendMailAsync(mail) 之前放置斷點;

:)

當它等待斷點時給出此錯誤當我刪除斷點時它已經工作了

我使用了上面提到的所有解決方案,但只有在我從 Gmail 設置啟用 IMAP 訪問鏈接以在 Gmail 設置中啟用 IMAP 訪問后,它才最終起作用

當然,其他解決方案中的點也是必需的。

嘗試更換主機,這是新的,我得到了這個配置 Mozilla Thunderbird

Host = "smtp.googlemail.com"

那對我有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM