我可以使用PHP中的mail()函数向多个收件人发送电子邮件,电子邮件地址用(,)分隔。
但是,如果列表中的任何电子邮件为无效,则此功能将失败。因此,我唯一的选择是多次循环并调用mail()函数,从而导致响应延迟。
非常感谢您帮助解决此问题。
伙计们,这仍然是个问题。问题是,尽管格式正确,但电子邮件是否合法。例如:如果google@yahoo.com'是邮件列表的一部分,那么邮件功能就失败了,甚至没有向列表中的其他人发送邮件。
问题在于提供的电子邮件的有效性,而不是语法。
只有当您的服务器(邮件程序,即sendmail、postfix或类似程序,查看您的PHP配置)有一个不存在的邮件地址(或类似地址)的黑名单时,才会发生这种情况。
PHP mail()函数的正常行为是将邮件和收件人列表委托给邮件程序,并报告数据是否被接受。mail()的返回值并不能说明传递是否成功。
知道这一点,有两种可能的解决方案:
-
重新配置邮件程序以接受这些地址。或者,
-
在调用mail()之前,请检查邮件地址是否存在,方法是检查收件人地址的MX记录。
一个简单的过滤器就足够了:
function MYFILTERS_emails($val){
return !!(filter_var($val, FILTER_VALIDATE_EMAIL));
}
$emails = implode(', ', array_filter($emails, 'MYFILTERS_emails'));
工作示例
您将不得不在电子邮件地址中循环使用任何解决方案,但您不必每次都使用邮件。
循环浏览电子邮件列表,检查每个列表的有效性,并相应地删除,然后使用您的原始邮件()fx清除列表。
PHP:(电子邮件列表为数组-$emails)
$cleanList = '';
foreach($emails as $email){
//REGEX email verify
if (eregi("^[a-z0-9._-]+@[a-z0-9._-]+.[a-z]{2,6}$", $email)) {
$cleanList .= $email.',';
}
//Remove last comma
$cleanList = substr($cleanList,0,-1);
main()。。。。