我正在使用 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封电子邮件,依此类推?
答案 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秒会增加执行时间。