如何使用DotNetOpenAuth对任何邮件提供商进行身份验证?

时间:2016-01-22 08:44:37

标签: c#

我开发了一个可以向任何域发送电子邮件的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发送电子邮件? 请举个例子。

4 个答案:

答案 0 :(得分:4)

我会考虑你的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

您还可以将连接移至网络或应用配置文件:

<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>

答案 1 :(得分:0)

一旦电子邮件和凭据更新,此代码适用于我:

  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凭据正确无误。

答案 2 :(得分:0)

从评论中,我可以看到image,显示您要做的事情:

但是,您无法知道配置是什么,用户将选择不正确的配置。如果用户选择TLS,但您没有来自邮件服务器的TLS支持,您会怎么做?

我认为您需要添加“发送测试电子邮件”按钮,以发送测试电子邮件以检查配置。然后,您可以显示遇到的任何错误。

答案 3 :(得分:0)

好的,我知道我正在添加很多答案,但是在看了几个小时之后,这是我的调查结果:

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

我认为这是帐户配置,而不是代码问题。