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