我可以使用 PHP 中的 mail() 函数向多个收件人发送电子邮件,电子邮件地址用 (,) 分隔。
但是,如果列表中的任何电子邮件无效,则此功能将失败。所以我唯一的选择是循环并多次调用 mail() 函数,导致响应延迟。
非常感谢您帮助解决此问题。
伙计们,这仍然是一个问题。问题是如果电子邮件不是合法的,尽管格式是正确的。例如:如果 'google@yahoo.com' 是邮件列表的一部分,则邮件功能失败,甚至没有向列表中的其他人发送邮件。
问题在于所提供电子邮件的有效性,而不是语法。
一个简单的过滤器就足够了:
function MYFILTERS_emails($val){
return !!(filter_var($val, FILTER_VALIDATE_EMAIL));
}
$emails = implode(', ', array_filter($emails, 'MYFILTERS_emails'));
只有当您的服务器(邮件程序,即 sendmail、postfix 等,查看您的 PHP 配置)有一个不存在的邮件地址(或类似的东西)的黑名单时,才会发生这种情况。
PHP mail() 函数的正常行为是将邮件和收件人列表委托给邮件程序,并报告数据是否被接受。mail() 的返回值并没有说明传递是否成功。
知道了这一点,有两种可能的解决方案:
重新配置邮件程序以接受这些地址。或者,
通过检查收件人地址的 MX 记录,在调用 mail() 之前检查邮件地址是否存在。
您将不得不使用任何解决方案遍历电子邮件地址,但是您不必每次都使用邮件。
遍历电子邮件列表并检查有效性或每个,并相应地删除,然后将原始 mail() 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);
主要的()....