选择message_type 1并发送电子邮件时,php error_log函数出错。我在extra_headers参数中放置的任何值都会停止接收任何电子邮件并创建错误。
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$headers .= 'From: error-404@'.substr($_SERVER['SERVER_NAME'],4)."\r\n";
$log = var_export(debug_backtrace(), true);
error_log("<HTML><body><h1>404 ERROR: $today</h1><br /><p>$log</p></body></HTML>", 1, "webmaster@domain.com", $headers);
mod_fcgid:stderr:PHP警告:error_log():在additional_header中找到多个或格式错误的换行符.....
当前PHP版本:5.6.24
感谢。
答案 0 :(得分:1)
论坛$extra_headers
的{{3}}文档说:
此消息类型使用与function
error_log()
相同的内部功能。
mail()
函数$additional_headers
的文档说明了<{1}}:
应使用
分隔多个额外标头CRLF
(\r\n
)
这是(我希望)您使用CRLF
(\r\n
)分隔邮件标题中的行的原因。
但是,相同的文档页面也在一个注释中说明了以下几段:
如果未收到消息,请尝试仅使用
LF
(\n
)。一些Unix邮件传输代理(最值得注意的是mail()
)会自动将LF
替换为CRLF
(如果使用CR
,则会导致CRLF
加倍。这应该是最后的手段,因为它不符合» qmail
。
我无法告诉qmail
但是当电子邮件服务器sendmail
时我遇到了相同的行为。当我使用LF
(\n
)作为标题中的行尾标记时,问题就消失了。
答案 1 :(得分:0)
这对我有用。不太确定这个解决方案是多么正确。
//create a boundary string. It must be unique so we use the MD5 algorithm to generate a random hash
$random_hash = md5(date('r', time()));
//define the headers we want passed. Note that they are separated with \r\n
$headers = "From: $from_name <$from_mail> \r\nReply-To: $from_mail";
//add boundary string and mime type specification
$headers .= "\r\nContent-Type: text/html; charset=\"iso-8859-1\"; boundary=\"PHP-alt-".$random_hash."\"";
error_log($sMsg, 1, $emailto, $headers);
我希望它可以帮助其他人。
感谢您的回复。