为什么我不能用Perl的Net :: SMTP发送邮件?

时间:2010-01-03 18:02:06

标签: perl email outlook

我使用Net::SMTP自动发送电子邮件。我希望得到通知,如果有人使用电子邮件进入Outlook,我使用了这个:

  $smtp->datasend("Disposition-Notification-To: to.me\@domain.com");

电子邮件已成功发送,但Outlook客户端未收到通知。

以下是代码片段:

$smtp = Net::SMTP->new("my mail host");
$smtp->mail("my\@adress.com);
$smtp->to("someuser@domain.com");
$smtp->data();
$smtp->datasend("Disposition-Notification-To:my\@adress.com");
$smtp->datasend("blah balh");
$smtp->datasend();
$smtp->quit;

4 个答案:

答案 0 :(得分:1)

Outlook客户端代理可能未正确设置以侦听这些事件。你能通过其他方法发送邮件吗?您需要确定是听众还是发件人遇到问题。

如果您可以在Outlook中接收邮件,但不是从您的代码中接收邮件,则说明您的代码有问题。请在您的问题中加入更多上下文代码 - 例如如何构造$ smtp对象?您是否按照documentation进行了$smtp->dataend();来电?

编辑(在您包含一些代码之后):该代码中存在拼写错误;你在脚本或模块的顶部使用use strict; use warnings;吗?您可以通过其他方式向客户收到邮件吗?

Edit2:如果您只缺少通知,则应该深入了解Outlook文档,了解接收此类通知的标准。例如您可能需要提供有效的“日期:”标题。

答案 1 :(得分:1)

Net :: SMTP模块对于这类东西来说是相当低级的。您可以更轻松地使用更高级别的模块,例如Email::Sender

答案 2 :(得分:0)

您需要在最后一个标题和邮件的实际正文之间加一个空行。

您似乎也在标题前缀后缺少空格。

我猜其中一个就是阻止Outlook正确解释标题。

试试这个:

$smtp->data();
$smtp->datasend("From: my\@address.com");
$smtp->datasend("To: my\@address.com");
$smtp->datasend("Subject: test mail");
$smtp->datasend("Disposition-Notification-To: my\@adress.com");
$stmp->datasend("\n");
$smtp->datasend("blah blah");
$smtp->dataend();
$smtp->quit;

答案 3 :(得分:0)

也许Outlook需要Return-Receipt-To标头(非标准,但你发送到Outlook,毕竟)。