最近一个朋友反映,他们公司在和欧洲某公司的邮件通讯过程,收到用户的投诉说:对方发过来的邮件,有时会有一两封收不到,但发送测试邮件,回复都没有问题!经过进一步了解,发过去的邮件,没有反映收不到,只是对方发过来的邮件,有时会收不到,但不是经常,只是偶尔发生!好吧,作为IT人员,最怕的就是偶发问题,无法重现故障,无法找到有价值的证据去排错!还好,在双方的共同努力下,最后也找到原因,调整相关参数,问题解决,下面将排错方法和过程分享给大家!
针对这个问题,首先让对方提供更有价值的信息,比如说:最近一次没收到的邮件,是谁、什么时候,发给谁的!还好,对方提供了欧洲某公司发过来的截图,有具体的发件人、收件人、发送时间,这下就好办了,马上查看SMTP LOG!当然,前提是你有开启详细的SMTP LOG记录(默认是没有开启的,条件允可的情况下,建议开启详细的SMTP LOG ,方便排错),如下:
首先通过对方提供的邮件地址,查询到对方的SMTP 会话IP为:213.150.22X.XXX,经过IP地位,此IP确实来自欧洲的奥地利:
在SMTP LOG中在查找此IP,发现确实有很多这个IP发过来的邮件,而且大多都是成功的!在反复过滤、查询后,终于LOG中发现了”Timed out“,这正是用户反应的问题,如下图:
从时间上分析,timed out为16:02:05,而SMTP会话开始时间为:15:52:01,即:大约10分钟后,出现Timed out!查看Exchange对应的SMTP参数:
Get-ReceiveConnector -Identity "Mail\Default SMTP" |FL
发现ConnectionTimeout 限制确实为10分钟!所以,问题找到,即:双方服务器在通过SMTP传送邮件的过程中,由于网络问题,或是邮件大小问题,超过SMTP连接限制的时间,导致邮件接受失败!
既然找到问题,就尝试修改限制时间来解决!参考下面的PowerShell:
https://technet.microsoft.com/en-us/library/bb125140.aspx?f=255&MSPPError=-2147217396
考虑到中国大陆到欧洲的网络问题,先将此参数调整为30分钟:
Set-ReceiveConnector -Identity "Mail\Default SMTP" -connectionTimeout 00:30:00
重启Microsoft Exchange Transport服务。
经过调整后,再观察几天,对方没有再反映此问题了!为了验证调整是否有效,分析调整后第二天的SMTP LOG,发现如下信息:
同样是上一次邮件地址和邮件服务器IP过来的SMTP会话,从8:34:57开始,到8:50:45结束,此SMTP Connection 会话持续了15分钟!证明上面的调整是正确、有效!
至于SMTP的ConnectionTimeout时间限制为多少合适呢?这个官方既然默认是10分钟,所以我们尽量还是以官方的为准,如果碰到这样的问题,建议一次不要调太高,要依你的网络质量、限制的邮件大小来调整,如此案例:邮件,大约5M,用时15分钟左右才完成,而邮件大小限制为10M,所以,相应的调整为30-40分钟,是合理的范围。