2017-03-06 21 views
1

我有以下代码作为我们的邮件发送脚本使用phpmailer的一部分。如何在此脚本中发送的每封电子邮件之间添加等待?

<?php 

$email_content = ob_get_contents(); 
ob_get_clean(); 

//$sql = mysql_query("SELECT email FROM oc_customer"); 
//sendMail($sql , 'email' , $email_content); 

$sql = mysql_query("SELECT email FROM oc_customer"); 
sendMail($sql , 'email' , $email_content); 

//$sql = mysql_query("SELECT * FROM test WHERE Subscribe=1"); 
//sendMail($sql , 'email' , $email_content); 

function sendMail ($sql_response , $column_name , $email_content) 
{ 
    while($row = mysql_fetch_array($sql_response)) 
    { 
     $mail = new PHPMailer; 

     // $mail->SMTPDebug = 3;         // Enable verbose debug output 
     $mail->isSMTP();          // Set mailer to use SMTP 
     $mail->Mailer = "smtp"; 
     $mail->Host = 'smtp.gmail.com';       // Specify main and backup SMTP servers 
     $mail->SMTPAuth = true;         // Enable SMTP authentication 
     $mail->Username = '[email protected]';    // SMTP username 
     $mail->Password = 'password';       // SMTP password 
     $mail->SMTPSecure = 'TLS'; 
     // Enable TLS encryption, `ssl` also accepted 
     $mail->Port = 465;          // TCP port to connect to 


     $mail->setFrom('[email protected]', 'mydomain.com'); 
     $mail->addAddress($row[$column_name] , 'Subscriber'); 
     // $mail->addAddress($row[$column_name] , 'Subscriber');  // Add a recipient 
     // $mail->addAddress('[email protected]');    // Name is optional 
     // $mail->addReplyTo('[email protected]', 'Information'); 
     // $mail->addCC('[email protected]'); 
     // $mail->addBCC('[email protected]'); 

     // $mail->addAttachment('/var/tmp/file.tar.gz');   // Add attachments 
     // $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name 
     $mail->isHTML(true);         // Set email format to HTML 
     $mail->CharSet = "UTF-8"; 

     $mail->Subject = 'PROMO sólo Hoy'; 

     $body = $email_content; 
     $body .= '<!DOCTYPE html> 
     <html> 
     <head> 
      <title></title> 
     </head> 
     <body> 
      <center><p style="color:gray;font-size:10px;"> Para no recibir mas promos , haga click <a href="mydomain.com/unsubscribe.php">aquí</a></p></center> 
     </body> 
     </html>'; 

     $mail->Body = $body ; 
     // $mail->AltBody = 'Aprovecha la promo del día.'; 




     $mail->WordWrap = 50; 

     if(!$mail->send()) 
     { 
      echo 'Message could not be sent.' . 'Mailer Error: ' . $mail->ErrorInfo; 
     } 
     else 
     { 
      echo 'Message has been sent to ' . $row[$column_name] . '<br>'; 
     } 

    }  
} 

?> 

如何添加sleep()以使每个电子邮件之间停顿20秒?我试图添加它,但似乎我没有选择正确的地方添加它。感谢您的帮助

+1

如果您正在编写新代码,** _ please_不要使用'mysql_ *'函数**。它们比较老,破损,在PHP 5.5中已经被弃用了(它已经很旧了,它甚至不再接收安全更新),并且在PHP 7中完全删除。使用['PDO'](https://secure.php.net/manual /en/book.pdo.php)或['mysqli_ *'](https://secure.php.net/manual/en/book.mysqli.php)替换为_prepared statements_和_parameter binding_。有关详细信息,请参阅http://stackoverflow.com/q/12859942/354577。 – Chris

+1

“我尝试添加它,但看起来我没有选择正确的位置来添加它。”你试过把它放在哪里? – Chris

+1

确保不要超过脚本最大运行时间,否则脚本将在发送所有邮件之前死亡。 Personnaly我会将这些电子邮件存储在数据库中并循环发送脚本。或者,您也可以使用带有JavaScript刷新的网页来循环播放所有电子邮件中的脚本。 –

回答

2

您可以在这个地方添加你的睡眠:

if(!$mail->send()) 
{ 
    echo 'Message could not be sent.' . 'Mailer Error: ' . $mail->ErrorInfo; 
} 
else 
{ 
    echo 'Message has been sent to ' . $row[$column_name] . '<br>'; 
    sleep(20); 
} 

sleep功能将被触发后,该邮件发送成功。

+0

会测试。谢谢。 – user7433174

相关问题