我有一个托管PHP应用程序的本地服务器。我的应用程序发送电子邮件到不同的地址但是,我注意到一个我无法弄清楚的问题。它会向内部地址发送电子邮件,但不会向外部地址发送邮件。
我在同一个网络上也有一台交换服务器。所以例如我有这两个“内部域”
domain1.com domain2.com
如果我从我的应用程序执行这个php函数,它就会毫无问题地交付
mail("name@domain1.com","Test Subject","Test message");
但是,如果我尝试向gmail,yahoo或任何外部域发送邮件,则不会发送邮件
mail("name@gmail.com","Test Subject","Test message");
我的服务器在Windows 2008 Server R2上运行,并通过IIS6安装了PHP5.3.19
如何更正此问题?
答案 0 :(得分:0)
mail()
需要php.ini中的额外配置,因为Windows没有Sendmail或类似的东西。
第一个是SMTP
设置,该设置应指向ISP的出站服务器,该服务器不一定是您从中检索邮件的服务器。当我在支持工作时,有很多问题像你描述的那样,因为入站服务器仍然会接受邮件,但仅限于本地的域。
第二个是sendmail_from
设置,这就是PHP为Windows发行版编写的小小邮件用户在每个SMTP事务中使用的内容,无论标题中包含什么内容。在* nix上Sendmail将读取标题并获取From:
地址本身,在Windows上,PHP将始终使用php.ini中的内容。如果这是一个“垃圾”地址,如example@example.com
或某个不存在域的东西,很多邮件服务器都会完全拒绝它。我建议在PHP.ini 中将其更改为正确的内容以及将以下行添加到邮件脚本中:
ini_set('sendmail_from', $from_address);
或者,只需使用PHPmailer,因为它只是比PHP的可怕的小mail()
函数更好。