2012-08-29 66 views
4

我意識到,batchEmail不再是新的SwiftMailer的一部分。所以我做了這個腳本:SwiftMailer批量電子郵件時間我的服務器出

<? 
// 
// GC PRESS EMAILER v5 
// 
ini_set('display_errors',1); 
error_reporting(E_ALL); 
require_once("config.php"); 
include_once("hawkmail/mail/lib/swift_required.php"); 
$c=mysql_connect($dbh,$dbu,$dbp); 
function SendEmail(){ 
    // DB 
    $s=mysql_query("SELECT * FROM `newgc`.`press_list`"); 
    // Process Color Listing Loop 
    while($r=mysql_fetch_array($s)){ 
    // ########################### 
    // START LOOP 
    // ########################### 
     $name=$r['name']; 
     $email=$r['email']; 
     $to=array(''.$email.''=>''.$name.''); 
     include("hawkmail/templates/press.php"); 
     # Email subject 
     $str=$name; 
     $str=substr($str, 0, strrpos($str, ' ')); 
     $subject='Dear '.$str.', you are invited to our Exclusive Party Collection Press Day!'; 
     # send message 
     include("hawkmail/settings.php");  
    } 
    // ########################### 
    // END LOOP 
    // ########################### 
} 
SendEmail(); 
?> 

數據庫有200條記錄。我跑了劇本,並將其發送幾封電子郵件,然後超時

504網關超時

nameemail記錄就像

約翰·史密斯 JOHN.SMITH @ site.com

很簡單。而我hawkmail/settings.php是這樣的:

# mail 
$smpturl="smtp.sendgrid.net"; 
$mailu="sitesitesite"; 
$mailp="sitessssssssssss"; 
$from=array("[email protected]"=>"site.com"); 

# login credentials & setup Swift mailer parameters 
$transport=Swift_SmtpTransport::newInstance($smpturl, 587); 
$transport->setUsername($mailu); 
$transport->setPassword($mailp); 
$swift=Swift_Mailer::newInstance($transport); 

# create a message (subject) 
$message=new Swift_Message($subject); 

# attach the body of the email 
$message->setFrom($from); 
$message->setBody($html, 'text/html'); 

$message->setTo($to); 
$message->addPart($text, 'text/plain'); 

# actually send the message 
if($recipients=$swift->send($message, $failures)){}else{} 

反正是有增加的PHP超時限制(我使用Ubuntu和Nginx的),或者是有沒有BatchMail替代()真不明白爲什麼它已被刪除。

有人可以使用新的swiftmailer發佈批處理郵件腳本的例子嗎?

+0

你的循環應該工作我認爲。如果雲盒子快速執行腳本,增加服務器內存如何?如果通過瀏覽器運行也許做後臺任務? (我不知道如何處理nginx或ubuntu,如果沒有得到cPanel) – AlphaApp

+0

PHP有超時限制,你需要一個cron作業我認爲 – M1th

回答

4

發送電子郵件是網上最複雜的事情。

這是使用次數最多的服務,也是濫用最多的服務。

我建立了我自己的定製電子郵件平臺發送批量電子郵件。

您遇到的超時是由於Apache和PHP的執行限制。

您需要與set_time_limit (0);

php /path/to/app/script.php像這樣直接在控制檯中運行它作爲一個CLI應用程序。

如果你沒有SSH訪問,然後用shell_exec像這樣運行:

shell_exec("php /path/to/app/script.php > /dev/null 2>/dev/null &"); 

這將確保調用,直到它完成它不流連腳本。

+0

謝謝。這就是我所追求的。 – TheBlackBenzKid

+0

'我建立了自己的定製電子郵件平臺來發送批量電子郵件.'出於興趣,你可以稍微解釋一下 - 它是開源的嗎? – TheBlackBenzKid

+0

Nop。尚未完成。到目前爲止,我已經完成了SMTP部分,仍然需要做POP3和IMAP,但這是我最不關心的問題之一。我主要需要完成交付和接收部分,以便能夠發送批量電子郵件和收到退回,我可以在現場很好地解析並添加到遞送報告中,以便確定是否有任何無效的電子郵件地址或其他原因交付失敗。我喜歡從頭開始做事,而這樣的事情會在我的簡歷中閃耀。我會在某個階段公開部分內容。 – transilvlad