我编写了一个 Perl 脚本(在机器 A 上),它将邮件发送到另一台服务器(机器 B),然后将其退回(使用 procmail 或其他转发机制,取决于机器 B),然后机器 A 上的脚本测量往返时间。
这在很长一段时间内都可以正常工作,但由于某种原因,当机器 B 为 GMAIL 时,它已停止工作。
这是我调试它的方法:
我尝试使用命令行中的“mail -s”发送类似的消息,并且邮件传递没有任何问题 - 所以邮件中继不是问题。
mailbounce@machineA.com:~$mail -s 'Round Trip Test 1366102726' mailbouncexxxxx@gmail.com A simple test message From The Mail Round Trip Monitor... . cc: mailbounce@machineA.com:~$
接下来,我将“to:”地址更改为我拥有的另一台机器,以查看脚本是否有效。它对另一台服务器(不是gmail)没有问题
接下来,我将脚本恢复为原始参数。我在端口 25 上启动了一个 tcpdump 并运行了脚本,然后也使用命令行发送了邮件。在 Wireshark 中分析数据包捕获并执行“Follow TCP Stream”时,输出如下:
使用脚本(未交付):
220 mail.out.com ESMTP Exim 4.74 Tue, 16 Apr 2013 10:58:36 +0200
EHLO machineA.domain.com
250-mail.out.com Hello machineA.domain.com [10.184.55.248]
250-SIZE 13631488
250-PIPELINING
250 HELP
MAIL FROM:<mailbounce@ machineA.domain.com>
250 OK
RCPT TO:<mailbouncexxxxx@gmail.com>
250 Accepted
DATA
354 Enter message, ending with "." on a line by itself
To: mailbouncexxxxx@gmail.com
Subject: Round Trip Test 1366102726
A simple test message From The Mail Round Trip Monitor...
.
250 OK id=1US1im-000Lr0-Qd
QUIT
221 mail.out.com closing connection
使用命令行(交付成功):
220 mail.out.com ESMTP Exim 4.74 Tue, 16 Apr 2013 10:59:02 +0200
EHLO machineA.domain.com
250-mail.out.com Hello machineA.domain.com [10.184.55.248]
250-SIZE 13631488
250-PIPELINING
250 HELP
MAIL From:<mailbounce@machineA.domain.com> SIZE=635
250 OK
RCPT To:<mailbouncexxxxx@gmail.com>
DATA
250 Accepted
354 Enter message, ending with "." on a line by itself
Received: from machineA.domain.com (localhost.localdomain [127.0.0.1])
.by machineA.domain.com (8.13.8/8.13.8) with ESMTP id r3G8x0jq015631
.for <mailbouncexxxxx@gmail.com>; Tue, 16 Apr 2013 10:59:00 +0200
Received: (from mailbounce@localhost)
.by machineA.domain.com (8.13.8/8.13.8/Submit) id r3G8wxGJ015622
.for mailbouncexxxxx@gmail.com; Tue, 16 Apr 2013 10:58:59 +0200
Date: Tue, 16 Apr 2013 10:58:59 +0200
From: mailbounce User <mailbounce@machineA.domain.com>
Message-Id: <201304160858.r3G8wxGJ015622@machineA.domain.com>
To: mailbouncexxxxx@gmail.com
Subject: test2
test
.
250 OK id=1US1jC-000LvF-OQ
QUIT
221 mail.out.com closing connection
根据我在上面看到的,这应该可以顺利工作吗?我也检查了 gmail 帐户中的“垃圾邮件”文件夹,但没有运气
为什么使用 Net::SMTP 而不是使用命令行...通过相同的 SMTP 中继时我的邮件无法投递?我已经没有地方可以看了。
笔记:
在创建这个问题之前,我查看了如何调试我的 Net::SMTP Perl 程序?. 我没有在互联网上找到任何其他相关信息。
上面的主机名、电子邮件帐户和 IP 地址是虚构的 - 这就是从输入/输出中修改的所有内容