2016-05-13 63 views
0

我已經使用Swiftmailer(使用它發送簡報)編寫了以下批量電子郵件發送腳本。通常情況下,一切正常,只有幾個用戶,他們有問題的電子郵件服務器,不斷拒絕電子郵件(例如,由於收件箱已滿,未驗證反向DNS條目,...)。問題在於Swiftmailer無限次重試發送這些郵件(直到服務器重新啓動)。限制電子郵件在swiftmailer發送重試

有沒有限制重試次數的方法?

我讀過Swift_FileSpool類,它有setRetryLimit函數,默認值是10重試。但我不知道如何使用它。此外,似乎默認的重試限制不適用於某些原因。

<?php 

$emails=get_to_emails();//list of emails 

require_once(SWIFTMAILER_KELIAS."swift_required.php"); 

$swMailer=Swift_Mailer::newInstance(Swift_MailTransport::newInstance()); 
$swMailer->registerPlugin(new Swift_Plugins_ThrottlerPlugin(10,Swift_Plugins_ThrottlerPlugin::MESSAGES_PER_MINUTE)); 

$message=Swift_Message::newInstance(); 
$message->setContentType('text/html'); 
$message->setCharset('UTF-8'); 

$message->setSender(array(ADMIN=>ADMIN_NAME)); 
$message->setFrom(array(ADMIN=>ADMIN_NAME)); 
$message->setSubject("subject"); 
$message->setBody($text,'text/html'); 
$message->addPart(strip_tags(str_replace(array("</h1>","</p>","</br>","<br>","<br/>"),array("</h1>\r\n","</p>\r\n","<br/>\r\n","<br/>\r\n","<br/>\r\n"),$text)),'text/plain'); 

foreach($emails as $email) { 
    $message->setTo($email); 
    $swMailer->send($message); 
} 

?> 

回答

1

您的代碼表明你正在使用SwiftMailers Swift_MailTransport()作爲運輸類,它是基於PHP的內置mail()功能。這是非常便攜的,但有可能無法預測的結果,並提供極其微弱的反饋。

mail()函數通常會將郵件放入本地郵件傳遞代理的隊列中。檢查你的服務器的smtp配置以改變行爲,p.e.重試間隔等。

爲了更直接地控制腳本行爲,可以考慮切換到Swift_SmtpTransport()

相關問題