2017-07-25 81 views
0

我正在發送正在工作的大量電子郵件,但需要很長時間。我只把這封電子郵件發送給了10個用戶,大約需要2分鐘。我必須發送超過10000個用戶的電子郵件。什麼是更快發送電子郵件的另一種方式?我正在使用PHPMailer。你能幫我嗎?如何使用php在更短的時間內發送批量電子郵件?

的index.php

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 

<form action="process.php?key=createmail2" method="POST"> 
    <input type="text" name="emailtemplate" placeholder="email" > 
    <input type="text" name="subject" placeholder="subject"> 
     <textarea name="mailbody" placeholder="mail body"></textarea> 
     <input type="submit" name="addmail" value="Add mail" > 
</form> 
</body> 
</html> 

Process.php

<?php 
include('mail/PHPMailerConfig.php'); 
switch($_GET['key']) { 
case 'createmail2':createmail2($conn);break; 
default : redirect('index.php'); 
} 

function createmail2(){ 
    $array=explode(",",$_POST['emailtemplate']); 
    $arrlength = count($array); 
    $subject=$_POST['subject']; 
    $mailbody=$_POST['mailbody']; 
    send($array,$arrlength, $subject, $mailbody); 
} 
?> 

PHPMailerConfig.php

<?php 
require_once('PHPMailerAutoload.php'); 
function send($array,$arrlength, $subject, $mailbody){ 
$mail = new PHPMailer; 
$mail->IsSMTP(); 
$mail->SMTPDebug = 0; 
$mail->Debugoutput = 'html'; 
$mail->Host = '*****'; 
$mail->Port = 587; 
$mail->SMTPSecure = 'tls'; 
$mail->SMTPAuth = true; 
$mail->Username = "[email protected]"; 
$mail->Password = "************"; 
$mail->setFrom('[email protected]', 'Teseting for email'); 
$mail->Subject = $subject; 
$mail->Body =$mailbody; 

for($x = 0; $x < $arrlength; $x++) 
{ 
    $mail->addAddress($array[$x]); 

     if (!$mail->send()) 
    { 
     echo "Mailer Error (" . str_replace("@", "&#64;", $array[$x]) . ') ' . $mail->ErrorInfo . '<br/>'; 
     break; //Abandon sending 
    } 
     else 
    { 
     echo "mail sent to : " . $array[$x] ; 

    } 
    $mail->clearAddresses(); 
    } 
} 
+0

如果您從Gmail發送郵件,您將無法發送那麼多郵件。他們有10或20個我認爲的限制。改爲使用服務,如亞馬遜,MailChimp或類似的。 –

+0

不,我不是從Gmail發送的。 –

+0

我會更新它。 –

回答

3

an example of how to send to a list from a database efficiently in the examples bundled with PHPMailer。使用PHPMailer發送大量內容並不會使您列入黑名單,但您需要謹慎行事。 Mandrill並不神奇 - 如果您通過它發送垃圾郵件,它與其他任何被封鎖一樣脆弱。

如果你想從PHP同時發送50個,使用pcntl擴展啓動多個進程,但它不會真的幫助你,因爲你將會極大地增加開銷。您可以在PHPMailer中設置SMTPKeepAlive = true,這將大大減少開銷(它避免爲每條消息建立一個新的連接),但它仍然不會發送同時消息 - 什麼都不會。 SMTP中沒有選項可以在同一連接上同時發送多個不同主體的消息。

在瀏覽器加載頁面期間發送到一個大列表是非常不可靠的;使用cron腳本或後臺進程來完成您的實際發送,並通過您的Web界面進行設置。一個提示,如果你正在等待頁面加載 - 儘早打電話給ignore_user_abort(),以便在瀏覽器關閉連接時不會停止發送,並且要注意頁面刷新!如果你想發送得更快,請安裝一個像postfix這樣的本地郵件服務器,並使用它來進行中繼 - 這比直接發送要快得多,也更可靠。

+0

如果您使用自己的SMTP服務器,則不要忘記在DNS中爲發件人主機名設置正確的DKIM和/或SPF記錄,否則許多電子郵件可能會反彈。 –

+0

完美答案,謝謝關注:) – Synchro

+0

我沒有使用數據庫。我有超過10000封帶逗號的電子郵件。我會直接進入輸入欄。但我會嘗試你的解決方案 –