2016-06-07 22 views
1

我們使用Perl程序使用Net::SMTP::SSL模塊發送電子郵件。我們也在使用Google SMTP服務器。他們每天通過SMTP發送100封電子郵件(如果您使用的是免費服務)。如何檢測拒絕發送SMTP響應?

有時我們意外地超過了這個限制,Google不發送電子郵件。但是我們的Perl程序似乎沒有選擇它。有誰知道如何檢測發送失敗?

我認爲這是相關代碼:

use Net::SMTP::SSL; 

my $smtp; 

$smtp = Net::SMTP::SSL->new('smtp.gmail.com', Port => 465, Debug => 0) or 
     die "Could not connect to Gmail server!"; 

$smtp->auth($L, $P) or die "Authentication Failed!"; 
$smtp->mail($from . "\n") or die "Cannot send as user $from!"; 
$smtp->to($to . "\n") or die "Cannot send to $to!"; 

$smtp->data(); 
$smtp->datasend("MIME-Version: 1.0\n"); 
$smtp->datasend("From: " . $from . "\n"); 
$smtp->datasend("To: " . $to . "\n"); 
$smtp->datasend("Subject: " . $subject . "\n"); 
$smtp->datasend("\n"); 
$smtp->datasend($body . "\n"); 
$smtp->dataend(); 
$smtp->quit; 
+1

所有'warn's'肯定輸出的東西? –

+0

你可以使用'Return'和/或'Envelope'參數來傳遞狀態通知的'mail'命令嗎? (['Net :: SMTP'](http://search.cpan.org/~shay/libnet-3.08/lib/Net/SMTP.pm)) – zdim

+0

有點難以閱讀。你能重新格式化嗎?試試/ elsif/else。如果+ not =除非 – xxfelixxx

回答

0

我不知道谷歌究竟是如何拒絕郵件的傳遞,如果達到了極限,但有幾個方法:

  • 拒絕郵件或rcpt命令:在這種情況下,您應該看到代碼中的警告
  • 拒絕郵件遞送:在這種情況下,dataend()應該告訴您問題,即發送時應該調用的最後一個方法郵件。但是看起來你甚至沒有在你的代碼中使用dataend(),這可能會導致交付成爲純粹的運氣。
+0

Thankyou,我在示例中添加了缺失的兩條底線 - 它們在我們的活動代碼中。我沒有對dataend()語句進行測試。所以我會嘗試。不幸的是,它很難複製,因此可能需要一兩天才能確認您的建議已奏效。 – Melchester

+0

是對dataend()語句的測試有效。謝謝。 – Melchester

相關問題