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
上需要某种"字符串转义"来实现这一点,但我有点不愿意篡改生产系统(除了插入一些日志输出)。
有人知道这类问题的解决方法吗?
这不是错误,而是预期行为。电子邮件地址的本地部分(@
之前的部分)可以包含.
,前提是它不是第一个或最后一个字符,并且前提是它不连续出现两次或多次。这意味着所有三个示例都是无效的电子邮件地址。
阅读有关有效电子邮件地址的更多信息。