尝试通过SMTP发送邮件。没有邮件到达,没有异常错误

时间:2012-03-19 15:58:19

标签: c# smtp wireshark

问题:制作了一个小型邮件程序,它在我的开发者电脑上完美运行,但投入生产后却失败了。

protected void Page_Load(object sender, EventArgs e)
{
    string smtpHost = ConfigurationManager.AppSettings["SmtpAddress"];
    MailMessage mail = new MailMessage();
    mail.From = new MailAddress(ConfigurationManager.AppSettings["FromMailAddress"]);
    mail.Sender = new MailAddress(ConfigurationManager.AppSettings["FromMailAddress"]);
    mail.To.Add(new MailAddress("zzz@xxx.yy"));
    mail.Subject = "Test mail";
    mail.Body = string.Format("Is this mail sent via {0} ?", smtpHost);

    lblMsg2.Text = string.Format("SmtpHost: {0}", smtpHost); ;

    SmtpClient client = new SmtpClient(smtpHost);
    try
    {
        client.Send(mail);
    }
    catch (Exception exception)
    {
        lblMsg3.Text = exception.Message.ToString();
        lblMsg4.Text = exception.InnerException.ToString();
    }
}

我确实在生产服务器上获得了正确的邮件地址和所有内容,但我的电子邮件收件箱中没有任何内容:-(。我没有收到任何例外。

我尝试在同一台服务器上使用telnet,然后我可以发送邮件。

我已经尝试安装WireShark,它正在查看服务器上的网卡,当使用telnet时,我确实得到了我怀疑的响应,但是从我的程序中我没有收到任何内容。

编辑2012-03-12 @ 09:46丹麦时间

现在已经将代码更新为

protected void Page_Load(object sender, EventArgs e) 
{ 
    string smtpHost = ConfigurationManager.AppSettings["SmtpAddress"]; 
    MailMessage mail = new MailMessage(); 
    mail.From = new MailAddress(ConfigurationManager.AppSettings["FromMailAddress"]); 
    mail.Sender = new MailAddress(ConfigurationManager.AppSettings["FromMailAddress"]); 
    mail.To.Add(new MailAddress("zzz@xxx.yy")); 
    mail.Subject = "Test mail"; 
    mail.Body = string.Format("Is this mail sent via {0} ?", smtpHost); 

    lblMsg2.Text = string.Format("SmtpHost: {0}", smtpHost); ; 

    SmtpClient client = new SmtpClient(smtpHost); 

    client.Send(mail); 
} 

非常有趣:即使插入绝对不存在的SMTP服务器,我仍然不会在我的生产环境中出现任何错误。我在我的开发者电脑上得到一个例外,这基本上意味着smtp服务器不存在(我也希望得到一条消息)。

3 个答案:

答案 0 :(得分:5)

案例解决: - )

我学到了更多关于IIS的知识!

IIS已设置为“将电子邮件存储在分拣目录中”而不是“将电子邮件发送到SMTP服务器”。不幸的是我在IIS上并不擅长,我不知道有这样的设置......我现在就是这样!

遗憾的是,来自@GarryM的“仔细检查配置设置”对我或我的邮件管理员来说不足以让我们看看IIS。我是一名程序员,而且我的mail-adm太过网络了: - )

谢谢大家的回答。部分是因为你所有的好提示和想法,我可以留下越来越多的部分。

答案 1 :(得分:1)

仔细检查邮件服务器的配置。如果它没有抛出异常,则问题很可能是邮件已被接受,但它没有中继或可能将其视为垃圾邮件。

由于垃圾邮件问题,一些托管服务提供商也会默默地阻止一些较大的免费邮件主机,如果您使用共享托管服务提供商,也值得问他们。

您是否尝试在本地运行相同的代码但指向实时邮件主机? (假设您可以从外部访问它)这样您就可以逐步执行代码并确保不会抛出异常。

答案 2 :(得分:0)

如果你删除了try / catch会有所帮助,因为这会允许任何异常传播。
如果您使用的是许多邮件服务器所需的安全连接,则另一件事是client.EnableSSL