PHPMailer群发邮件

PHP使用 foreach 循环发送邮件时,会产生如下错误:

$emails = [
    '123@qq.com',
    '456@qq.com',
    '789@qq.com',
];

// $Email 为邮件发送类
foreach ($emails as $email) {
    $Email->send($email, 'subject', 'test');
}

正确执行结果应该是 : 3个邮箱各收到一封邮件,然而事实是:
第一个 邮箱收到 邮件; 
第二个 邮箱收到 邮件; 
第三个 邮箱收到 邮件;

                 ...

总结一下其他人的解决方案:

问题一 :

不清楚你使用的什么邮件类库 一般情况下 
$Mailer->send($emails, $title, $content) ,这里$emails是可以传入数组的
而至于为何收到邮件的数目不对 可能与内部指针有关系,这个又与PHP版本有关系,同样的解释适用于问题二
你可以看一下PHP官方文档对foreach的说明
In PHP 5, when foreach first starts executing, the internal array pointer is automatically reset to the first element of the array. This means that you do not need to call reset() before a foreach loop.
As foreach relies on the internal array pointer in PHP 5, changing it within the loop may lead to unexpected behavior.
In PHP 7, foreach does not use the internal array pointer.

问题二:

产生的原因我猜想,是send的时候保存了发送的主题和内容,第二次调用send,在保存一个,如此累加。
解决:你可以换一个邮件库。或者在foreach里new一个邮件对象,这样每次的邮件对象就不同了。

问题三:

curl是同步请求,简单的拉取可以换成file_get_contents函数代替。

问题四:

$Email类与循环变量$email算是重名了

问题五:

get方法逻辑有没有出错

我的方法:

在循环里面new一个新的对象来发送邮件,但是这里有一个问题,一人一封一封发送的话,耗时又久又资源,抄送的话,收件人就会看到其他收件人了,这种时候,密抄就最是适合了。

什么是抄送、密抄?

抄送就是将一封邮件同时发给多个收件人,各收件人都可以看到其他收件人地址。抄送效果和平时发邮件时,用“,”将地址隔开的效果差不多,密抄和抄送差不多,但是密抄,各收件人都不可以看到其他收件人地址,换句话说,他收到这封邮件,根本没法知道这个是群发还是单独发送。只有发件人自己知道。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值