【问题标题】:.NET SMTP.send not working but no errors.NET SMTP.send 不起作用但没有错误
【发布时间】:2013-10-01 03:22:57
【问题描述】:

我有一个功能齐全的 VB.NET 解决方案,它使用一个简单的标准代码,我在网上的很多网站上都找到了,就像这样:

    Dim oMessage As New MailMessage
    oMessage.From = New MailAddress("someone@abc.com")
    oMessage.To.Add("someone_else@abc.com")
    oMessage.Subject = "test mail"
    oMessage.Body = "test mail body"
    oMessage.IsBodyHtml = False
    Dim oSMTP As New SmtpClient("192.168.1.253")
    oSMTP.Port = 25
    oSMTP.EnableSsl = False
    oSMTP.Credentials = New System.Net.NetworkCredential("someone@abc.com", "password")
    oSMTP.Send(oMessage)

工作解决方案依赖于具有通常配置的 gmail smtp 服务器。 我试图在另一个环境中复制相同的解决方案,其中 smtp 服务器位于公司 LAN (192.168.1.253) 并使用端口 25,不需要 SSL。 事实: 1) 我尝试在其上部署解决方案的服务器正在运行第三方软件,该软件从专用地址发送电子邮件(我需要使用相同的电子邮件地址)。此功能处于活动状态且正在工作; 2) 我尝试通过 telnet 连接到 SMPT 服务器,并成功通过 SMPT 协议向我的私人电子邮件地址发送了一封电子邮件。这是意料之中的,因为其他软件在做同样的工作时没有遇到问题; 3) 我测试了我的解决方案,使用 try-catch 块得到任何错误,但没有电子邮件到达目的地,即使我的代码终止时没有错误。

我为 smtp 和消息(以及其他目标地址)尝试了很多不同的选项,但结果始终相同:没有发送任何消息。我最后的机会是寻找与服务器配置或防病毒软件的任何冲突。但我无法理解为什么通过 SMPT 协议与服务器的“简单”对话是成功的,而我非常简单的代码却没有。

最后一点:我提到的邮件服务器应该是 Microsoft Exchange Server。

问题可能出在哪里?任何帮助将不胜感激。

【问题讨论】:

  • 可能该解决方案是我在一百次测试中忘记的唯一组合...只要我添加了 oSMTP.dispose 行,该解决方案就开始起作用了。这个建议是在其他几个线程中找到的,我可能错过了它或者我尝试了错误的配置,所以在到达代码末尾之前就报告了错误。
  • 只是为了强调实际的解决方案:使用 SMTPClient 对象后始终使用 Dispose 方法以确保正确关闭与服务器的连接。

标签: .net email smtp send


【解决方案1】:

我建议您使用wireshark 来监控您的应用程序和邮件服务器之间的通信;我知道我曾经遇到过类似的问题,并且在收到消息后我能够看到服务器响应的错误消息(由于某种原因,错误消息没有一直传递到应用程序)

也这样做:

                oMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;

因此,如果服务器无法发送您的消息,您将收到通知。

此外,如果您使用 SendAsync 方法发送邮件,并且将自己绑定到(您的 smtp 对象的)SendCompleted 事件,您应该能够看到该事件将为您提供的 AsyncCompletedEventArgs 对象中的任何错误。

【讨论】:

  • 谢谢。这是我的选择之一,但我不知道使用什么应用程序来监视与服务器的通信。可能这会帮助我找到解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多