php foreach函数应发送1条短信但每个联系人发送2-3条。 代码应通过电子邮件和短信发送邀请。但是,联系人有时会同时收到2或3个邀请,这会使SMS被阻止。
public function handle(QRCodeEmail $mail) {
try {
foreach ($this->event->contacts as $eventContact) {
if($eventContact->pivot->sent_date) {
continue;
}
if($eventContact->email) {
$mail->subject = $this->event->name;
$mail->setEmail($eventContact->email);
$mail->setName($eventContact->first_name . ' ' . $eventContact->last_name);
$mail->send([
'name' => $this->event->name ?? '',
'hostName' => $this->event->host_name ?? '',
'suffix' => $eventContact->suffix,
'firstName' => $eventContact->first_name,
'lastName' => $eventContact->last_name,
'data' => $eventContact->pivot->hash,
]);
}
\Curl::to(env('SMS_GATEWAY_URL'))
->withData([
'username' => env('SMS_GATEWAY_USERNAME'),
'password' => env('SMS_GATEWAY_PASSWORD'),
'message' => $this->generateBodyForSms($eventContact, env('INVITATION_LINK') . $eventContact->pivot->hash),
'numbers' => $eventContact->phone,
'sender' => env('SMS_GATEWAY_SENDER'),
])
->post();
(EventsContacts::find($eventContact->pivot->id))->update([
'sent_date' => Carbon::create()->format('Y-m-d H:i:s')
]);
}
$this->job->delete();
} catch (\Exception $e) {
$this->job->delete();
throw new \Exception($e);
}
}
答案 0 :(得分:0)
一些可能性
也许您应该尝试array_unique
(http://php.net/manual/en/function.array-unique.php)(查看unique_multidim_array
评论中发布的array_unique
函数。)
您是否可能有多个记录(具有相同号码的不同“主键”?然后存储已收到短信的电话号码,并在发送新列表之前检查该列表。
也许您的退出条件if($eventContact->pivot->sent_date)
无效。