在公司环境中,我们的邮件服务器仅提供 25/tcp 和 587/tcp 端口。
当我们使用 Perl 脚本(使用 HTML::Mail)发送数百封合法邮件时,偶尔会失败并显示“无法连接到邮件服务器”。
我们认为 sendmail 服务器上的重负载使其拒绝连接,或者甚至可能不响应初始请求。
现在,拥有邮件服务器的团队不合作,并要求提供服务器拒绝连接的证据。
问题:假设问题出在服务器端,万一出现故障,可以从客户端收集哪些信息?如果确实如此,如何证明问题出在服务器端?
[[我不确定这个问题在这里是否有效;当问题本身不清楚时,我不能寻求帮助解决问题;我要求提供一份简短的提示和技巧列表,以帮助调试此问题;我什至愿意接受有关解决方法的意见]]
答案1
解决方案是 sendmail 团队查看他们的“/etc/mail/sendmail.mc”文件:
dnl #
dnl # The following limits the number of processes sendmail can fork to accept
dnl # incoming messages or process its message queues to 20.) sendmail refuses
dnl # to accept connections once it has reached its quota of child processes.
dnl #
dnl define(`confMAX_DAEMON_CHILDREN', `20')dnl
dnl #
dnl # Limits the number of new connections per second. This caps the overhead
dnl # incurred due to forking new sendmail processes. May be useful against
dnl # DoS attacks or barrages of spam. (As mentioned below, a per-IP address
dnl # limit would be useful but is not available as an option at this writing.)
dnl #
dnl define(`confCONNECTION_RATE_THROTTLE', `3')dnl
(Treat "dnl" as a comment leadin string.)
如果您只是将电子邮件大量发送出去,那么您可能应该限制它们。
答案2
记录错误消息和问题发生的确切时间。它应该可以帮助 sendmail 管理员查明日志文件中的问题。
对于群发邮件,您应该:
a) 重复使用 SMTP 连接来发送多封电子邮件(例如 50 封)
b) 限制每秒提交的邮件数量(例如 20-50 封)
我可以建议的其他措施是特定于 sendmail 的,并且需要 sendmail 管理员的合作。