我的SMTP服务不向外部地址发送邮件

时间:2013-05-30 15:33:14

标签: php smtp external

我有一个托管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

如何更正此问题?

1 个答案:

答案 0 :(得分:0)

Windows上的

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()函数更好