2010-01-03 52 views
-1

我使用Net::SMTP来自动化电子邮件。我想,如果有人利用电子邮件到Outlook我用这个来得到通知:为什么我不能用Perl的Net :: SMTP发送邮件?

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

电子邮件发送成功地但Outlook客户端没有得到通知。

下面是代码片段:

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

回答

1

这是可能的Outlook客户端代理未正确设置为监听这些事件。你可以通过其他方法发送邮件给它吗?您需要隔离它是否是有问题的听众或发件人。

如果您可以在Outlook中接收邮件,但不是从您的代码中获取邮件,那么这是您的错误代码。请在您的问题中加入更多上下文代码 - 例如$ smtp对象是如何构造的?您是否按照documentation拨打$smtp->dataend();电话?

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

编辑2:如果通知是你所缺乏的,那么你应该深入Outlook文档,看看接收这种通知的标准是什么。例如您可能需要提供有效的“Date:”标题。

+0

我从我的代码收到Outlook的电子邮件,但我没有收到通知。 – dan 2010-01-03 18:25:06

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; 
1

网:: SMTP模块是这种东西相当低的水平。您可以使用更高级别的模块(如Email::Sender)更轻松一些。

+0

电子邮件::发送似乎不赞成,如其CPAN页面所述,使用电子邮件::发件人代替... – sebthebert 2010-01-04 10:22:32

0

也许Outlook需要Return-Receipt-To标题(非标准,但是您发送到Outlook,最终)。