.NET SMTP.send不工作,但没有任何错误

问题描述:

我有一个功能齐全的解决方案VB.NET用一个简单的标准代码,我周围很多网网站上找到的工作,即是这样的:.NET SMTP.send不工作,但没有任何错误

Dim oMessage As New MailMessage 
    oMessage.From = New MailAddress("[email protected]") 
    oMessage.To.Add("[email protected]") 
    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("[email protected]", "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。

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

+0

可能解决方案是我在上百次测试中忘记的唯一组合。只要我添加了oSMTP.dispose这一行,解决方案就开始工作。这个建议可以在其他几个线程中找到,我可能错过了它,或者我尝试了一个错误的配置,所以在代码结束之前报告了一个错误。 –

+0

只是强调实际的解决方案:请始终在使用SMTPClient对象后使用处理方法确保与服务器的连接已正确关闭。 –

我建议你使用wireshark来监视应用程序和邮件服务器之间的通信;我知道我曾经有类似的问题,我能看到服务器收到消息后回应的错误消息(出于某种原因,错误消息并没有使它一直到应用程序)

也这样做:

   oMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; 

因此,如果服务器无法发送您的消息,您将收到通知。另外,如果您使用SendAsync方法发送邮件,并将自己绑定到(您的smtp对象的)SendCompleted事件,那么您应该能够看到事件将为您提供的AsyncCompletedEventArgs对象中的任何错误。

+0

谢谢。这是我的选择之一,但我并不知道使用什么应用程序来监视与服务器的通信。 Probabily这可以帮助我找到解决方案。 –