Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在尝试通过SMTP发送邮件。没有邮件到达,也没有异常错误_C#_Smtp_Wireshark - Fatal编程技术网

C# 正在尝试通过SMTP发送邮件。没有邮件到达,也没有异常错误

C# 正在尝试通过SMTP发送邮件。没有邮件到达,也没有异常错误,c#,smtp,wireshark,C#,Smtp,Wireshark,问题:我已经制作了一个小型邮件程序,它在我的开发人员pc上运行得非常好,但投入生产后失败了 protected void Page_Load(object sender, EventArgs e) { string smtpHost = ConfigurationManager.AppSettings["SmtpAddress"]; MailMessage mail = new MailMessage(); mail.From = new MailAddress(Conf

问题:我已经制作了一个小型邮件程序,它在我的开发人员pc上运行得非常好,但投入生产后失败了

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服务器时,我在我的生产环境中仍然没有收到任何错误。我在我的开发人员pc上确实收到了一个异常,这基本上意味着SMTP服务器不存在(我也希望收到一条关于该服务器的消息).

如果您删除了try/catch,则会有所帮助,因为这将允许任何异常向上传播。

另一种尝试是
客户端。如果您使用的是许多邮件服务器所需的安全连接,请启用SSL

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

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

您也尝试过在本地运行相同的代码,但指向live mail主机(前提是您可以从外部访问它),这样您就可以逐步检查代码并确保不会引发异常。

案例解决:-)

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

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

很遗憾,@GarryM的“仔细检查您的配置设置”不足以让我或我的邮件管理员查看IIS。我太像一个程序员,我的邮件管理员太像一个网络人:-)


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

有运行或阻止它的反病毒程序吗?使用Telnet,您通过哪个端口连接?不,没有防病毒阻止。Telnet正在使用端口25(wireshark扫描所有端口-仍然没有结果)。服务器位于我所在的内部,因此我没有使用外部主机提供商。或者,我应该说,邮件永远不会离开程序所在的服务器。Will double(tripple)-在my mail super administrator出现时检查邮件服务器的配置:-)。将尝试让同一邮件管理员从我的开发pc访问live mail主机,以查看它是否在那里工作。现在已删除try/catch-仍然没有例外。已尝试启用SSL,但出现错误“不能为拾取目录传递方法启用SSL”。因此得出结论,这不是错误:-)是否已尝试显式设置邮件客户端上的端口号?e、 g.cleint.Port=XXX;另外,我注意到您没有设置任何凭据,无论是客户端还是客户端。凭据=新网络凭据(“用户名”、“密码”);或client.UseDefaultCredentials=true;现在已经尝试将client.Port=25和UseDefaultCredentials设置为true,但仍然不起作用。。。我最大的困惑是:当我插入一个不存在的smtp服务器时,为什么没有收到异常错误?