在php

时间:2019-01-11 12:22:05

标签: php sendgrid

我正在使用 sendgrid 电子邮件传递服务向用户发送电子邮件。

下面是我的代码,该代码向网站的所有用户发送电子邮件。

foreach($resident_emails as $email){
     $this->load->model('email_model');
     $this->load->model('preferences_model');
     $user_email = $email->email;
     $admin_email = $from_email;
     $email_row = array('from_email'=>$admin_email,'from_name'=>$from_name,'message'=>$newsletter,'subject'=>$subject);
     $arr_var = array('subject'=>$subject,'message'=>$newsletter);
     $this->email_model->sendEmail($user_email,$email_row,$arr_var);
 }

例如,现在我必须向200多个用户发送电子邮件。

问题

但是问题是,仅发送了10封电子邮件,并且在发回邮件时,我收到了“ 失败”状态。

问题

我的问题是,我怎样才能停止执行foreach loop 10秒钟或更长时间,然后在一定时间后再发送10封电子邮件,依此类推?

2 个答案:

答案 0 :(得分:1)

PHP提供内置功能sleep():

foreach($resident_emails as $email){
     $this->load->model('email_model');
     $this->load->model('preferences_model');
     $user_email = $email->email;
     $admin_email = $from_email;
     $email_row = array('from_email'=>$admin_email,'from_name'=>$from_name,'message'=>$newsletter,'subject'=>$subject);
     $arr_var = array('subject'=>$subject,'message'=>$newsletter);
     $this->email_model->sendEmail($user_email,$email_row,$arr_var);
     sleep(10);
 }

答案 1 :(得分:1)

如果您真的想等待10秒再发送几封电子邮件,则可以使用php提供的sleep-function

$i = 0;
foreach($resident_emails as $email){
    $this->load->model('email_model');
    $this->load->model('preferences_model');
    $user_email = $email->email;
    $admin_email = $from_email;
    $email_row = array('from_email'=>$admin_email,'from_name'=>$from_name,'message'=>$newsletter,'subject'=>$subject);
    $arr_var = array('subject'=>$subject,'message'=>$newsletter);
    $this->email_model->sendEmail($user_email,$email_row,$arr_var);
    $i++;

    // check if this is the nth iteration
    if($i == 10) {
        $i = 0;
        sleep(10);
    }
}

在上面的示例中,我们发送了10封电子邮件。在下一次迭代中,我们等待10秒钟,然后再发送10封邮件...等等。

我非常怀疑这能否解决您的问题。请记住,始终等待10秒会增加执行时间。