2010-01-03 53 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,最終)。