从web.config发送带有凭据的电子邮件时出错

时间:2017-03-30 07:14:49

标签: c# asp.net-mvc smtp

我正在开发ASP.NET MVC的网站。 我在IdentityConfig.cs

中有此功能
public Task SendAsync(IdentityMessage message)
{
    SmtpClient client = new SmtpClient();
    var msg = new MailMessage();
    msg.From = new MailAddress("info@mywebsite.com");
    msg.To.Add(message.Destination);
    msg.Subject = message.Subject;
    msg.Body = message.Body;
    client.Host = "mywebsite.com";
    client.Port = 25; 
    client.Credentials = new
        System.Net.NetworkCredential("info@mywebsite.com", "mypassword");
    return client.SendMailAsync(msg);
}

我在IIS 8中设置了SMTP服务,这个功能正常。 问题是当我在Web.config中配置SMTP凭据并尝试发送电子邮件时。 MailSettings Web.config的一部分如下:

<system.net>
    <mailSettings>
      <smtp>
        <network host="mywebsite.com"
                 port="25" userName="info@mywebsite.com" password="mypassword" />
      </smtp>
    </mailSettings>
</system.net>

,新的SendAsync功能是:

public Task SendAsync(IdentityMessage message)
{
    SmtpClient client = new SmtpClient();
    var msg = new MailMessage();
    msg.From = new MailAddress("info@mywebsite.com");
    msg.To.Add(message.Destination);
    msg.Subject = message.Subject;
    msg.Body = message.Body;
    return client.SendMailAsync(msg);
}

但是当我在控制器中运行时,会出现以下错误:

  

错误的命令序列。   服务器响应是:   尝试发送到非本地电子邮件地址时,此邮件服务器需要身份验证。   请检查您的邮件客户端设置或联系您的管理员以验证是否为此服务器定义了域或地址。

可能是什么原因?

1 个答案:

答案 0 :(得分:2)

尝试将defaultCredentials添加到false

  <network
          clientDomain="mywebsite.com"
          defaultCredentials="false"
          enableSsl="true"
          host="smtp.gmail.com"
          port="587"
          userName="sender@mywebsite.it" password="xxxxxxx"
        />

请注意,对于某些服务器(例如gmail),message.From需要与用户名

匹配