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

时间:2012-02-06 20:25:29

标签: php email phplist

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);

我无法在我自己的网络服务器上重现此错误,我将其设置为PHPList用于测试目的 不幸的是,唯一显示此行为的系统是生产系统。除此之外,我无法访问该系统上的任何日志文件 - 所以我真的不知道出了什么问题。
我最好的猜测是,需要$to上的某种“字符串转义”才能使其工作,但我有点不愿意篡改生产系统(除了插入一些日志输出)。

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

1 个答案:

答案 0 :(得分:3)

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

详细了解valid email addresses