我试图使用NLog的邮件目标通过安全(SSL)smtp服务器发送电子邮件。这是我的配置:
<target type="Mail"
name="MailTarget"
layout="${message}"
encoding="UTF-8"
html="False"
addNewLines="False"
subject="hi8766"
to="ben.g@MyCompany.com"
from="ben.g@MyCompany.com"
body="${message}"
smtpUserName="ben.g"
enableSsl="True"
smtpPassword="12345"
smtpAuthentication="Basic"
smtpServer="smtp.MyCompany.com"
smtpPort="465"
deliveryMethod ="Network"
pickupDirectoryLocation=""
timeout="20000"/>
然而,当我使用logger.info(message)
时,没有任何反应。我打开了NLog的内部登录,并在我看到的内部日志上启动了Wireshark:
2016-02-05 10:46:54.3968 Debug Sending mail to ben.g@MyCompany.com using smtp.MyCompany.net.il:465 (ssl=True)
2016-02-05 10:47:14.4526 Error System.Net.Mail.SmtpException: The operation has timed out.
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at NLog.Internal.MySmtpClient.NLog.Internal.ISmtpClient.Send(MailMessage )
at NLog.Targets.MailTarget.ProcessSingleMailMessage(List`1 events)
问题是我可以看到SYN-SYN / ACK-ACK传输,但接着是ssl 谈判没有开始,一切都停止,直到客户端的FIN。这很奇怪,因为我在同一设置上比较了网络行为和Outlook,ssl确实启动,一切正常,电子邮件也被发送。
答案 0 :(得分:0)
TL; DR:.Net中不支持SSL +端口465(隐式SSL)。您只能使用SSL +端口25(显式SSL)
现在有一个GitHub issue for this。如果我们可以在NLog中为此建立一些变通方法,请告诉我们。