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
上的某种“字符串转义”才能使其工作,但我有点不愿意篡改生产系统(除了插入一些日志输出)。
有没有人知道这类问题的解决方法?
答案 0 :(得分:3)
这不是错误,是预期的行为。电子邮件地址的本地部分(@
之前的部分)可能包含.
,前提是它不是第一个字符,也不是最后一个字符,并且它也不会出现两次或更多次连续。这意味着所有三个示例都是无效的电子邮件地址。