我有一个功能齐全的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。
哪里可能是问题?任何帮助将不胜感激。
答案 0 :(得分:0)
我建议您使用wireshark来监控应用程序和邮件服务器之间的通信;我知道我曾经有类似的问题,我能够看到服务器在收到消息后响应的错误消息(由于某种原因,错误消息没有一直到应用程序)
也这样做:
oMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
因此,如果服务器无法发送您的消息,您将收到通知。
此外,如果您使用SendAsync方法发送邮件,并将自己绑定到(smtp对象的)SendCompleted事件,您应该能够看到事件将为您提供的AsyncCompletedEventArgs对象中的任何错误。 / p>