【问题标题】:How to add wait between each email sent in this script?如何在此脚本中发送的每封电子邮件之间添加等待?
【发布时间】:2017-03-06 19:33:13
【问题描述】:

我有以下代码作为我们使用 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@gmail.com';              // 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('info@mydomain.com', 'mydomain.com');
        $mail->addAddress($row[$column_name] , 'Subscriber'); 
        // $mail->addAddress($row[$column_name] , 'Subscriber');     // Add a recipient
        // $mail->addAddress('ellen@example.com');               // Name is optional
        // $mail->addReplyTo('info@example.com', 'Information');
        // $mail->addCC('cc@example.com');
        // $mail->addBCC('bcc@example.com');

        // $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 秒?我已经尝试添加它,但似乎我没有选择正确的位置来添加它。感谢您的帮助

【问题讨论】:

  • 如果您正在编写新代码,不要使用mysql_* 函数。它们又旧又坏,在 PHP 5.5 中被弃用(它太旧了,甚至不再接收安全更新),并在 PHP 7 中完全删除。使用 PDOmysqli_*prepared statements参数绑定。详情请见stackoverflow.com/q/12859942/354577
  • “我已经尝试添加它,但似乎我没有选择正确的位置来添加它。”你试过把它放在哪里?
  • 请确保不要超过脚本的最大运行时间,否则您的脚本将在所有邮件发送之前终止。 Personnaly 我会将这些电子邮件存储在数据库中并循环发送脚本。或者,您也可以使用带有 javascript 刷新的网页在所有电子邮件中循环播放脚本。
  • 脚本最长运行时间是多少?我的意思是这是在哪里检查的?

标签: php phpmailer sendmail


【解决方案1】:

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

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函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-11
    • 2013-02-17
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多