net - c# mailmessage cc



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

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

        var fromAddress = new MailAddress("[email protected]");
        var fromPassword = "xxxxxx";
        var toAddress = new MailAddress("[email protected]");

        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帳戶[email protected]。 此人正在使用諸如電子郵件,客戶端或移動設備等應用程序。

如果這是一名劫機者試圖訪問您的帳戶,我們阻止了登錄嘗試。 請查看登錄嘗試的詳細信息:

2014年1月3日星期五13:56:08 UTC UTC地址:xxx.xx.xx.xxx(abcd.net。)地點:美國賓夕法尼亞州費城費城賓夕法尼亞州

如果您不認識此登錄嘗試,則其他人可能會嘗試訪問您的帳戶。 您應該登錄到您的帳戶並立即重置您的密碼。

重設密碼

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

您誠摯的Google帳戶團隊

https://ffff65535.com


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

情況1:密碼錯誤時

情況2:當您嘗試從某個App登錄時

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

每個人都有一個解決方案

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

案例2的解決方案1 :通過google.com/settings/security/lesssecureapps訪問安全設置並啟用安全性較低的應用。 這樣你就可以從所有應用程序登錄。

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

案例3的解決方案1 :(這可能會有所幫助)您需要查看活動。 但由於最新的安全標準,該鏈接將不會有用,因此查看該活動將不會有所幫助。 所以請嘗試下面的情況。

案例3的解決方案2 :如果您將代碼託管在生產服務器的某個位置,並且您有權訪問生產服務器,則需要遠程桌面連接到生產服務器,並嘗試從生產服務器的瀏覽器登錄一次。 這將添加excletioon登錄到谷歌,你將被允許從代碼登錄。

但是,如果您無法訪問生產服務器,該怎麼辦? 嘗試解決方案3

案例3的解決方案3:您必須啟用Google帳戶的其他時區/ IP登錄。

要做到這一點,請點擊鏈接https://g.co/allowaccess ,然後點擊繼續按鈕以允許訪問。

就是這樣。 幹得好。 現在,您將可以通過任何計算機和任何應用程序登錄到您的Google帳戶。


下面是我的code.I也有同樣的錯誤,但問題是,我給我的密碼wrong.The下面的代碼將完美工作..嘗試它

            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");             
            mail.From = new MailAddress("[email protected]");
            mail.To.Add("[email protected]");
            mail.To.Add("[email protected]");
            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);

你可以在我的博客中參考它


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

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

如果你在設置證書之後把smtpClient.UseDefaultCredentials = false ...這行設置為null這些證書...


只需打開或Gmail的設置。 看下面給出的圖像:



嘗試更換主機,這是新的,我配置了mozilla thunderbird

Host = "smtp.googlemail.com"

為我工作


對我來說有效的是激活安全性較低的應用程序選項(我使用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("[email protected]")
        mail.[To].Add("[email protected]")
        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


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

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

首先,我在下一頁(以Gmail用戶身份登錄)上批准了所有未知設備(源自愛爾蘭的一些IP地址): https://security.google.com/settings/u/1/security/secureaccounthttps://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("[email protected]", "my_password"); 

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

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



我是一個面向企業用戶的谷歌應用程序,我花了最後幾個小時處理這個問題,即使在所有正確的設置(smtp,port,enableSSL等)之後。 以下是我和那些試圖發送電子郵件時拋出5.5.1錯誤的網站的工作原理:

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

這樣做後,我的網站電子郵件表單再次工作。 祝你好運!


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

            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 "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)...

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

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

或2)登錄gmail到您的本地計算機,按照此Link並選擇查看此活動並採取適當的措施。


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

登錄到您的電子郵件後, google.com/settings/security/lesssecureapps

這將帶你到下一頁





gmail