ASP.NET MVC SMTPClient无法在托管环境中工作

时间:2017-02-04 15:20:03

标签: c# asp.net asp.net-mvc smtp smtpclient

当我在localhost上本地运行我的应用程序时,电子邮件成功发送,没有例外。但是当我发布应用程序并尝试重新创建电子邮件时,它不会发送电子邮件,也不会发送带有相应错误的视图。

try
{
    using (var mail = new MailMessage())
    {
        const string email = "*******@gmail.com";
        const string password = "*********";
        var loginInfo = new NetworkCredential(email, password);
        mail.From = new MailAddress("*******@gmail.com");
        mail.To.Add(new MailAddress("email@email.com"));
        mail.Subject = subject;
        mail.Body = body;
        mail.IsBodyHtml = true;
        try
        {
            using (var smtpClient = new SmtpClient("smtp.gmail.com", 587))
            {
                smtpClient.EnableSsl = true;
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Credentials = loginInfo;
                smtpClient.Send(mail);
            }
        }
        finally
        {
            mail.Dispose();
        }

    }
}
catch (SmtpFailedRecipientsException ex)
{
    foreach (SmtpFailedRecipientException t in ex.InnerExceptions)
    {
        var status = t.StatusCode;
        if (status == SmtpStatusCode.MailboxBusy ||
            status == SmtpStatusCode.MailboxUnavailable)
        {
            return View(status);
        }
        else
        {
            return View(status);
        }
    }

}
catch (SmtpException Se)
{
    // handle exception here
    return View(Se);
}

catch (Exception ex)
{
    return View(ex);
}

2 个答案:

答案 0 :(得分:0)

此处不显示错误消息,但可能是客户端身份验证错误。 请尝试:

  1. 登录您的Gmail帐户
  2. 在gmail设置下允许托管的IP
  3. 重试发送电子邮件
  4. 另外需要注意的是,最后你的MailMessage()对象不需要尝试..因为它已经包含在using语句中,所以当它到达using块的末尾时,它将为你处理它,并且任何错误都会被你的外部try catch块捕获。

答案 1 :(得分:0)

删除所有异常处理,然后重试。找出错误是什么,然后从那里开始。

我怀疑你遇到困难的原因是你尝试/捕捉设置方式的b / c。内在的尝试/捕获让我觉得有点奇怪。