PHPList对于带有前导、尾随或多个相邻点的电子邮件地址失败


PHPList fails for email addresses with leading, trailing, or multiple adjacent dots

PHPList(版本2.10.17)无法将消息发送到与以下格式之一匹配的地址:

my..Name@domain.com
myName.@domain.com
.myName@domain.com

错误消息为Could not instantiate mail function.有问题的代码是:

function MailSend($header, $body) {
    $to = "";
    for($i = 0; $i < count($this->to); $i++)
    {
        if($i != 0) { $to .= ", "; }
        $to .= $this->to[$i][0];
    }
    if ($this->Sender != "" && (bool) ini_get("safe_mode") === FALSE)
    {
        $old_from = ini_get("sendmail_from");
        ini_set("sendmail_from", $this->Sender);
        $params = sprintf("-oi -f %s", $this->Sender);
        $rt = @mail($to, $this->EncodeHeader($this->Subject), $body,
                    $header, $params);
    }
    else
        $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, $header);
    if (isset($old_from))
        ini_set("sendmail_from", $old_from);
    if(!$rt)
    {
        $this->SetError($this->Lang("instantiate"));
        return false;
    }
    return true;
}

选择的代码路径是:

   else
      $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, $header);

我无法在我自己的Web服务器上重现这个错误,我在那里设置了PHPList以进行测试
不幸的是,唯一表现出这种行为的系统是生产系统。更重要的是,我无法访问该系统上的任何日志文件,所以我真的不知道出了什么问题
我的最佳猜测是,$to上需要某种"字符串转义"来实现这一点,但我有点不愿意篡改生产系统(除了插入一些日志输出)。

有人知道这类问题的解决方法吗?

这不是错误,而是预期行为。电子邮件地址的本地部分(@之前的部分)可以包含.,前提是它不是第一个或最后一个字符,并且前提是它不连续出现两次或多次。这意味着所有三个示例都是无效的电子邮件地址。

阅读有关有效电子邮件地址的更多信息。

相关文章: