如何处理phpmailer中的每小时邮件限制

时间:2014-04-30 20:42:33

标签: php email phpmailer

我正在使用PHP邮件程序,它工作正常,除了我认为主机限制为每小时100。 以下是100发送后发出的调试信息。

  

服务器 - &gt;客户:550查询@ ** .me超出限速(100.2 / 1h)2014-04-30 19:01:30 SMTP错误:DATA命令失败:550查询@ ** < /strong>.me超出速率限制(100.2 / 1h)SMTP错误:不接受数据。 SMTP错误:不接受数据。

我需要发送大约1600封电子邮件(大约每两周发送一次),但无法找到如何在限制的情况下执行此操作。

有关如何执行此操作的任何建议,无需每小时手动返回并运行脚本,直到发送所有电子邮件。

希望这是发布此问题的正确位置,只有我用Google搜索并找不到任何简单的答案(除了联系主持人......)

如果有一个脚本方式,下面是我正在使用的代码

if($result = $user_obj->getAllNewsletterWhereActive($db)){
        try {
            // initiate object for mail and set smtp
            $mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch
            $mail->IsSMTP(); // telling the class to use SMTP           
            $mail->SMTPKeepAlive = true;// keep the SMTP open (remember to close at end of script)


            $mail->Host       = "mail.******.me"; // SMTP server
            $mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
            $mail->SMTPAuth   = true;                  // enable SMTP authentication
            $mail->Host       = "mail.******.me"; // sets the SMTP server
            $mail->Port       = 587;                    // set the SMTP port for the GMAIL server
            $mail->Username   = "enquiries@*******.me"; // SMTP account username
            $mail->Password   = "*******";        // SMTP account password
            $mail->AddReplyTo('enquiries@******.me');
            $mail->SetFrom('enquiries@******.me');
            $mail->AddReplyTo('enquiries@******.me');
            $mail->Subject = $Subject;
            $mail->isHTML(true);  



            foreach($result as $row) {
                // build simple unsubscribe link
                $resetCode = base64_encode($row->NewsletterEmail);
                $websiteLink = 'http://'.$_SERVER['HTTP_HOST'].'/unsubscribe.php?code='.$resetCode;

                $mail->Timeout    =   60; // set the timeout (seconds)
                $mail->Body = $Message.'<br><br>Please click the below link to unsubscribe <br><a href="'.$websiteLink.'">Unsubscribe</a>'; // 
                $mail->AddAddress($row->NewsletterEmail);

                // send email and output success or fail massage
                if($mail->Send()){
                    $message .= 'Message Sent OK to '.$row->NewsletterEmail.'<br>';
                }
                else {
                    $error .= 'Message FAILED to '.$row->NewsletterEmail.'<br>';
                }

                // clear the address for the next loop
                $mail->clearAddresses();                
            }

            // close SMTP conncetion
            $mail->SmtpClose();

        } 
        catch (phpmailerException $e) {         
            echo $e->errorMessage(); //Pretty error messages from PHPMailer         
        } 
        catch (Exception $e) {          
            echo $e->getMessage(); //Boring error messages from anything else!          
        }

    }
    else {
        $error .= '<strong>Error! </strong>There was no email addresses returned or selected. please try again or contact support!<br>';
    }

非常感谢任何建议!

2 个答案:

答案 0 :(得分:2)

它是这样的:

  1. 将电子邮件传递队列保留在数据库中。
  2. 使用cronjob并每小时发送100封电子邮件(或99为安全)
  3. 那就是它! :)

    PS 主机不太可能解除限制。您还可以查看Amazon SES,SendGrid,SMTP.com和此类服务。

答案 1 :(得分:0)

不确定这是否会对您有所帮助,但几个月前它为我解决了同样的问题 http://m.youtube.com/watch?v=tlqmbNtW_x8