我编写了一个Perl脚本,该脚本从数据库中读取电子邮件地址列表,并在cc
字段中使用它们发送电子邮件。
my $ccList = (($acctType eq 1) ? $sfAdminEmail : $salesCcList);
$ccList =~ s/\\//;
$smtp->cc($ccList);
$smtp->data();
$smtp->datasend("From: $supportEmail\r\n");
$smtp->datasend("To: $toAddress\r\n");
$smtp->datasend("Cc: $ccList\r\n");
$smtp->datasend("Subject: " .$subject. "\r\n");
$smtp->datasend("\r\n");
#Send the message.
$smtp->datasend("$message");
$smtp->datasend("\r\n");
$smtp->dataend();
...
...
对于此次投放,
$acctType = 0
和$salesCcList = 'pqr3853@gmail.com'
但邮件没有到达邮箱。根据日志,似乎电子邮件地址中的反斜杠导致了问题:
Jan 13 09:20:10 cm cron: Net::SMTP=GLOB(0x98dc480)>>> MAIL FROM:<support@xyz3853.in>#015
Jan 13 09:20:10 cm cron: Net::SMTP=GLOB(0x98dc480)<<< 250 2.1.0 Ok
Jan 13 09:20:10 cm cron: Net::SMTP=GLOB(0x98dc480)>>> RCPT TO:<abc3853@gmail.com>#015
Jan 13 09:20:10 cm cron: Net::SMTP=GLOB(0x98dc480)<<< 250 2.1.5 Ok
Jan 13 09:20:10 cm cron: Net::SMTP=GLOB(0x98dc480)>>> DATA#015
Jan 13 09:20:10 cm cron: Net::SMTP=GLOB(0x98dc480)<<< 354 End data with <CR><LF>.<CR><LF>
Jan 13 09:20:10 cm cron: Net::SMTP=GLOB(0x98dc480)>>> From: support@xyz3853.in#015
Jan 13 09:20:10 cm cron: Net::SMTP=GLOB(0x98dc480)>>> To: abc3853@gmail.com#015
Jan 13 09:20:10 cm cron: Net::SMTP=GLOB(0x98dc480)>>> Cc: pqr3853\@gmail.com#015
答案 0 :(得分:0)
如果你在日志文件中查看几行:
MAIL FROM:<xyz@icmsg.in>#015
<abc@gmail.com>#015
DATA#015
这些行以#015
结尾,看起来像octal 015
,这是\r
。在我看来,当您输出\r\n
时,perl正在进行自动换行转换,因此\n
会转换为\r\n
,因此结果为\r\r\n
,即& #39;是额外的\r
,这是您日志文件中出现的内容。在你了解这些内容之前,这可能是无害的:
From: support@xyz3853.in#015
To: abc3853@gmail.com#015
Cc: pqr3853\@gmail.com#015
现在额外的\r
字符看起来像是电子邮件地址的一部分。服务器是否知道应该在.in
之后停止解析电子邮件地址?
docs中的示例使用\n
来终止标头中的行,并在标头的末尾使用\n\n
。从Net :: Cmd docs:
datasend ( DATA )
Send data to the remote server, converting LF to CRLF.
这意味着要做的是将必要数量的\n
个字符添加到一行的末尾。 datasend()
处理将\n
字符转换为\r\n
以符合规范。
确认。我错过了这个:
Cc: pqr3853\@gmail.com#015
^
|
你觉得问题是什么?什么是错误代码?