1 最近准备改改自己的个人主页,加上发邮件到功能,发现居然不是那么好用。gmail和msn可以收到邮件,但是163/sina/sohu的邮箱居然都收不到,非常郁闷。其实代码也很简单。 php manual 已经说得相当清楚了。
但是,如果我使用Linux Shell 的mail命令是可以发送成功的,不过多加了一条-f 参数伪造发件人。这是唯一的不同,于是maillog 的其中一个字段ctladdr显示也不一样。不再是apache用户,我怀疑163等国内的邮件服务提供商,把所有的apache的用户的邮件当成垃圾邮件处理掉了。
根源找到,于是问题就很好解决了,查一下php的手册,发现mail函数原来也是可以伪造发件人的。
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )
在第六个参数additional_parameters使用额外的参数"-f sender_addr@mydomain.com", 问题就解决了。
程序:
$email=$_POST['email'];
$title='易物天下商城重置密码(系统邮件请勿回复)';
$findPwd_url=$co->WEBSITE_URL.'/member_login1?mid='.base64_encode($_POST['phone']).'&out='.base64_encode(time());
$content="尊敬的会员:
您好! <br/>
这是一封密码重置邮件。如果您并未尝试修改密码,请忽略本邮件。<br/>
您可以通过点击以下链接重置帐户密码(基于安全考虑,本链接24小时内有效)。 <br/> ".$findPwd_url." <br/>
如果您不能点击以上链接,请将该链接复制到浏览器地址栏中访问。 <br/>
客服热线:400-688-3913";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=gbk" . "\r\n";
$headers .="From:sever.register@i1515.com\r\nReply-To: {$email}";
// $data['status']= mail($email,$title,$content,$headers,'-f hxg@i1515.com')?1:0;
$data['status']=mail($email,$title,$content,$headers)?1:0;
2.在服务器上配置代理