簡體   English   中英

如何使用DotNetOpenAuth對任何郵件提供商進行身份驗證?

[英]How to authenticate to any mail provider using DotNetOpenAuth?

我開發了一個ASP.net應用程序,可以向任何域發送電子郵件。 我正在使用一個簡單的.Net smtp客戶端:

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

var smtpClient = new System.Net.Mail.SmtpClient
    {
        Host = "smtp.gmail.com",// or any others
        Port = 587, // correspond to host
        EnableSsl = true,
        DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
    };

smtpClient.Send(message) 但我無法使用.Net.Mail對任何現代郵件提供商(包括gmail,yahoo,yandex)進行身份驗證,因為我遇到以下異常The server response was: 5.5.1 Authentication Required

所有smtp配置都正確填寫。

如何使用DotNetOpenAuth進行身份驗證,使用.Net.Smtp進行發送電子郵件? 請舉個例子。

我會考慮你的SMTP服務器。 是否允許您發送電子郵件? 您的請求是否已發送到服務器並進行驗證? 你用Fiddler看過流量了嗎?

您可以使用SendGrid注冊一個免費帳戶,該帳戶將為您提供SMTP服務器以便為您發送電子郵件。 你真的更喜歡使用像SendGrid這樣的公司而不是gmail SMTP服務器。

除此之外, Mail4Net可能會幫助您完成代碼。

要將GMail用作SMTP服務器,您必須設置一些值:

Outgoing Mail (SMTP) Server: smtp.gmail.com
Use Authentication: Yes
Use Secure Connection: Yes (this can be TLS or SSL depending on your mail client)
Username: your GMail account, i.e. user@gmail.com
Password: your GMail password
Port: 465 or 587

您還可以將連接移動到Web或app配置文件:

<configuration>

  <system.net>
    <mailSettings>
      <smtp deliveryMethod="network" from="pam@gmail.com">
        <network
          host="smtp.gmail.com"
          port="465"
          enableSsl="true"
          userName="pam@gmail.com"
          password="password"
        />
      </smtp>
    </mailSettings>
  </system.net>

</configuration>

一旦電子郵件和憑證更新,此代碼適用於我:

  try
  {

    var message = new MailMessage();

    message.Subject = "Test email";
    message.Body = "This is a test message";
    message.From = new MailAddress("from@email.com");
    message.To.Add(new MailAddress("to@email.com"));

    var client = new SmtpClient
    {
      Host = "smtp.sendgrid.com",
      Port = 587,
      Credentials = new NetworkCredential("User_Name", "My_Password")
    };

    client.Send(message);

  }
  catch (Exception ex)
  {
    var msg = ex.Message;
  }

確保您的SendGrid憑據正確無誤。

從評論中,我可以看到圖像 ,顯示您要做的事情:

但是,您無法知道配置將是什么,用戶將選擇不正確的配置。 如果用戶選擇TLS,您會怎么做,但郵件服務器沒有TLS支持?

我認為您需要添加“發送測試電子郵件”按鈕,以發送測試電子郵件以檢查配置。 然后,您可以顯示遇到的任何錯誤。

好的,我知道我正在添加很多答案,但是在看了幾個小時之后,這是我的發現:

The error is the client is not authenticated (5.5.1)

我收到了同樣的錯誤,然后我注意到收件箱中有一封電子郵件(很少使用gmail帳戶), Someone tried to sign in to your Google Account xxxxx@gmail.com from an app that doesn't meet modern securty standards.

您的應用是否被谷歌屏蔽: http//security.google.com/settings/security/activity可能會顯示您的應用,但是您收到了電子郵件嗎?

此外,如果該帳戶使用兩步驗證,則不會在未設置應用專用密碼的情況下發送電子郵件: https//support.google.com/accounts/answer/185833

我認為這是帳戶配置而不是代碼問題。

暫無
暫無

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

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