PHP向多个收件人发送电子邮件,即使其中一个收件人无效


PHP Send Email to multiple recipients even if one of the recepient is Invalid

我可以使用PHP中的mail()函数向多个收件人发送电子邮件,电子邮件地址用(,)分隔。

但是,如果列表中的任何电子邮件为无效,则此功能将失败。因此,我唯一的选择是多次循环并调用mail()函数,从而导致响应延迟。

非常感谢您帮助解决此问题。


伙计们,这仍然是个问题。问题是,尽管格式正确,但电子邮件是否合法。例如:如果google@yahoo.com'是邮件列表的一部分,那么邮件功能就失败了,甚至没有向列表中的其他人发送邮件。

问题在于提供的电子邮件的有效性,而不是语法。

只有当您的服务器(邮件程序,即sendmail、postfix或类似程序,查看您的PHP配置)有一个不存在的邮件地址(或类似地址)的黑名单时,才会发生这种情况。

PHP mail()函数的正常行为是将邮件和收件人列表委托给邮件程序,并报告数据是否被接受。mail()的返回值并不能说明传递是否成功。

知道这一点,有两种可能的解决方案:

  1. 重新配置邮件程序以接受这些地址。或者,

  2. 在调用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()。。。。