1

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

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

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


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

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

4

3 回答 3

0

一个简单的过滤器就足够了:

function MYFILTERS_emails($val){
    return !!(filter_var($val, FILTER_VALIDATE_EMAIL));
}

$emails = implode(', ', array_filter($emails, 'MYFILTERS_emails'));

工作示例

于 2013-03-07T11:48:30.997 回答
0

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

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

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

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

  2. 通过检查收件人地址的 MX 记录,在调用 mail() 之前检查邮件地址是否存在。

于 2013-03-31T03:19:14.400 回答
-1

您将不得不使用任何解决方案遍历电子邮件地址,但是您不必每次都使用邮件。

遍历电子邮件列表并检查有效性或每个,并相应地删除,然后将原始 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);

主要的()....

于 2012-08-21T02:48:52.897 回答