今天将网站的PHP版本升级到最新的4.3.10,结果发现一个重要的Bug,在网站发送邮件时会失败,导致不能发送注册邮件和取密码邮件,提示是:Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing in....
查了一下,应该是PHP Bug #28976,这个Bug参见http://bugs.php.net/bug.php?id=28976,居然说是4.3.6就有了,但前一阵子用4.3.8却没有发现这一现象。具体表现是明明在php.ini中已经设定了sendmail_from,在php代码中用ini_get()也能正确的获得其值,但是将header传送给邮件函数就是报错,倒!
test.php:
<?php
mail('example@php.com','subject','body',"From: eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%65%78%61%6d%70%6c%65%2e%63%6f%6d%22%3e%6d%65%40%65%78%61%6d%70%6c%65%2e%63%6f%6d%3c%2f%61%3e%27%29%3b'))\r\n");
/*直接将From传入都不行,仍然是:
Warning: mail(): "sendmail_from" not set in php.ini or custom "From:"
header missing in C:\dev\quiktests\test.php on line 3
*/
?>
解决的方法可以通过修改php的源代码重编译来解决,……太麻烦了吧?
最简单的法子是在调用ini_get("sendmail_from")之前,先ini_set("sendmail_from", $tempFromAddress)一下就OK了。然后等着PHP的新版本吧!

