System.Net.Mail不会在生产中发送

dav*_*ids 6 c# asp.net-mvc sql-server-2008

我正在尝试在我的网站中实施"忘记密码"方法.它在调试中完美运行.使用相同的代码和数据库,但发布到我们的Web服务器时,它尝试发送消息时失败.

我得到的错误是:

There was an error sending you an email.
The specified string is not in the form required for an e-mail address.
Run Code Online (Sandbox Code Playgroud)

电子邮件是有效的,所以我不知道为什么它失败了.

因为它是一个实时环境,所以我不能单步执行代码来确切地知道它失败的原因和原因.我实现了数据库日志记录,因此我可以看到它在失败之前获得了多远,并且到目前为止它成功执行了所有代码:

 var smtp = new SmtpClient
 {
     Host = host,
     Port = port,
     EnableSsl = ssl,
     DeliveryMethod = SmtpDeliveryMethod.Network,
     UseDefaultCredentials = false,
     Credentials = new NetworkCredential(fromAddress.Address, fromPw)
 };
 using (var message = new MailMessage()
 {
     Subject = subject,
     Body = body,
     IsBodyHtml = ishtml,
     From = fromAddress
 })

 {
     foreach (MailAddress t in toCol)
     { message.To.Add(t); }
     foreach (MailAddress c in ccCol)
     { message.CC.Add(c); }
     foreach (MailAddress b in bccCol)
     { message.Bcc.Add(b); }
     smtp.Send(message);
 }
Run Code Online (Sandbox Code Playgroud)

它永远不会到达下一个db日志记录,所以它必须在这里失败.在我的测试中,我只有一个电子邮件地址,to而且没有bcccc.在调试中单步执行时,它会正确加载单个电子邮件地址,并且不会加载任何for ccbcc.我不知道它是一个无效的电子邮件地址.

编辑:

我们使用Google Apps作为邮件服务器,因此我的工作站和服务器都必须连接.我使用以下内容:

  • 主持人:smtp.gmail.com
  • 港口:587
  • EnableSsl:true
  • 凭据:在调试中有效的有效用户名和密码

编辑2: 收集一些你的建议.
fromAddress较早设置使用从这样的分贝值:

DataTable ts = DAL.Notification.GetNotificationSettings();
var fromEmail = ts.Rows[0]["fromadr"].ToString().Trim();
var fromName = ts.Rows[0]["fromname"].ToString().Trim();
var host = ts.Rows[0]["server"].ToString().Trim();
var port = Convert.ToInt32(ts.Rows[0]["smtpport"]);
var ssl = Convert.ToBoolean(ts.Rows[0]["is_ssl"]);
var ishtml = Convert.ToBoolean(ts.Rows[0]["is_html"]);
var bodyTemplate = ts.Rows[0]["bodyTemplate"].ToString();
body = bodyTemplate.Replace("{CONTENT}", body).Replace("{emailFooter}","");// Needs to use the Global emailFooter resource string

var fromAddress = new MailAddress(fromEmail, fromName);
Run Code Online (Sandbox Code Playgroud)

我甚至尝试过像这样的地址编码:

message.From = new MailAddress("websystem@mydomain.com");
Run Code Online (Sandbox Code Playgroud)

我仍然收到错误,但在定义消息时仍然失败.

关于如何找到并解决问题的任何其他建议?

回答

我没有在web.config中定义默认的地址,如下所示:

    <system.net>
     <mailSettings>
       <smtp from="email@yourdomain.com">
         <network host="smtp.yourdomain.com"/>
       </smtp>
     </mailSettings>   </system.net>
Run Code Online (Sandbox Code Playgroud)

所以它在var message = new MailMessage()我定义正确的from地址之前失败了.

我要么在web.config中实现var message = new MailMessage(From,To)或提供默认from地址(这就是我所做的)

Cod*_*odo 4

此错误可能由两件事引起:

  1. 您使用的电子邮件地址之一(用于message.Tomessage.CCmessage.Bcc)无效,即它不符合 的要求格式someuser@somedomain.xxx

  2. Web.Config配置的 From 地址无效:

    <system.net>
      <mailSettings>
        <smtp from="invalid@@email">
          <network host="smtp.gmail.com"/>
        </smtp>
      </mailSettings>
    </system.net>
    
    Run Code Online (Sandbox Code Playgroud)