php mail 在windows下的配置
php 的mail函数可以发邮件,它的配置是在php.ini中设置的,一般linux上很方便,众多VPS,host一定会为你设置好。
但是在windows中开发怎么配置呢?
可使用sendmail来通过远程smtp服务器来发邮件。(我这里只讲发邮件,对于一般开发是足够了)
下载sendmail http://www.glob.com.au/sendmail/sendmail.zip
解压到目录例如c:/sendmail
编辑sendmail.ini
smtp_server=smtp服务器地址
auth_username=邮箱登录名
auth_password=邮箱密码
force_sender=发件人地址全写 这个如果不配置可能导致无法发送,但是我实际测试可以不写。
反注释debug_logfile=debug.log这一句以便调试
编辑php.ini
sendmail_from = you@yourdomain.com 这个我没写也可以发邮件
sendmail_path = “c:/sendmail/sendmail.exe -t –i”
注意force_sender和sendmail_from这两个配置都是为了自动加上From头,但是我的环境即使都设置了,还是没有在邮件头中加上From,导致550 Administrative prohibition错误。
最后只好在mail函数调用时在additional_headers这个参数中包含From,例如
<?php mail('xxxx@gmail.com', "Test Email", 'good email','From: xxxx@ig2net.info' ) ?>
这样就可以了。
注意From由于安全的原因,可以使其他域名的随意账户,即是此账户不存在,但是如果是配置的邮件服务器的域名,则必须存在。
例如上例中我使用本域名admin@ig2net.info 账户作为邮件服务器,那么'From: xxxx@ig2net.info' 这样发送必须有'xxxx@ig2net.info' 这个账户,否则发不出去。
然而如果使用From: abcd@somedomain.com 作为发件人,那是绝对可以发出去的。当然这可归于垃圾邮件。
今天碰到一个问题是,由于我的域名改了,本机测试的邮件发不出去了,打开sendmail的debug.log一看,似乎是验证成功的,但是接着一大堆乱码。我尝试将smtp_ssl设置为none则解决了此问题。
参见:
http://www.devcha.com/2010/04/how-to-send-emails-from-php-on-windows.html