最近准备改改自己的个人主页,加上发邮件到功能,发现居然不是那么好用。gmail和msn可以收到邮件,但是163/sina/sohu的邮箱居然都收不到,非常郁闷。其实代码也很简单。 php manual 已经说得相当清楚了。
查看sendmail的maillog,发现奇怪的内容。
但是,如果我使用Linux Shell 的mail命令是可以发送成功的,不过多加了一条-f 参数伪造发件人。这是唯一的不同,于是maillog 的其中一个字段ctladdr显示也不一样。不再是apache用户,我怀疑163等国内的邮件服务提供商,把所有的apache的用户的邮件当成垃圾邮件处理掉了。
根源找到,于是问题就很好解决了,查一下php的手册,发现mail函数原来也是可以伪造发件人的。
在第六个参数additional_parameters使用额外的参数"-f sender_addr@mydomain.com", 问题就解决了。