Exchange在企业应用中,经常会有各种应用程序需要调用Exchange的SMTP服务来发送各知系统通知邮,如:OA、HR、E-flow签核系统等。
最近,碰到一个案例,用户反映某E-Flow签核系统的SMTP邮件通知功能迁移到2010后,E-Flow签核在提交和签核过程中变的很慢,有时还会发生超时,而无法完成E-Flow签核流程!
收到用户反映后,向E-Flow系统开发人员了解到,以前用的是Exchange 2003的SMTP服务,没有发现过,此问题是改到2010后出现的,所以重点怀疑Exchange 2010 SMTP的原因!
进一步了解到,此E-flow系统在所有提交、签核时都会生成邮件通知相关的用户。为了确保邮件通知成功,每提交一个邮件到SMTP服务器,都需要得到SMTP服务的确认,正是在提交的时候,大约需要等30秒左右,才能显示提交成功、或是签核完成!
在查看Exchange SMTP中继相关文章时,从官网找这个文章:
https://technet.microsoft.com/zh-cn/library/hh529935(v=exchg.141).aspx
从exchange 2010开始,针对队列引入了“卷影冗余”功能,该功能可在整个传送过程中为邮件提供冗余。使用卷影冗余,将延迟从传输数据库删除邮件,直至传输服务器确认该邮件的所有下一跃点都已完成传递。 Exchange 2010 传输服务器从非 Exchange 2010 源接收邮件时,Exchange 会尝试通过延迟对发送服务器的确认,直到确认邮件已成功在内部传递到所有后续跃点,来实现卷影冗余。这样,如果 Exchange 2010 服务器失败,则发送邮件服务器会假设邮件从未传递到 Exchange 并将再次尝试传递。相了解更多关于“卷影冗余”的功能介绍,可参考官方文档:https://technet.microsoft.com/zh-cn/library/dd351027(v=exchg.141).aspx
正是因为此功能:“Exchange会尝试通过延迟对发送服务器的确认”,所以E-Flow系统一直没有收到关于邮件是否完成传递的通知,一直在等待中,直到SMTP服务返回完成传递的通知后,才进行到下一步!
使用Get-ReceiveConnector -Identity " SMTP Application relay " | format-list
查看 -MaxAcknowledgementDelay 属性,值为30秒!正好和用户反应的,点一次提交或是签核,需要等30秒左右时间!
即:SMTP服务收到E-Flow系统发过来的SMTP请求,需要30秒后才会回复服务器确认信息。
依官方的介绍,可以尝试降低延迟确认时间或是完全禁用!因为此连接器专门提供给应用程序来作SMTP Relay功能,所以直接禁用!
Set-ReceiveConnector "SMTP Application relay" -MaxAcknowledgementDelay 0
重启SMTP服务后,用户反应问题得到解决!
此现象在Exchange 2010/2013同样适用!