PHP主机名绑定

时间:2009-03-05 17:39:14

标签: php linux email

如果我编写PHP脚本来连接到SMTP服务器(在我的情况下,这是本地安装的Postfix)并发送电子邮件,则电子邮件中的第一个“已接收”标题最终为:

Received: from [SERVER_IP] (SERVER_HOSTNAME [127.0.0.1]) by SERVER_HOSTNAME (Postfix) with ESMTP id D682A34381 for <TO_EMAIL>; Thu,  5 Mar 2009 17:25:18 +0000 (GMT)

这是因为PHP脚本是通过浏览器访问的,而Apache则绑定到SERVER_IP。

但是,如果我从PHP CLI执行相同的脚本,那么第一个“收到”标题就是:

Received: from localhost.localdomain (SERVER_HOSTNAME [127.0.0.1]) by SERVER_HOSTNAME (Postfix) with ESMTP id AB51934381 for <TO_EMAIL>; Thu,  5 Mar 2009 17:18:01 +0000 (GMT)

这是因为常规Linux用户(通过cron)调用了PHP CLI。

如何将PHP CLI绑定到主机名/ IP,以便当用户通过cron作业调用它时,“received”标头显示服务器主机名/ IP而不是localhost.localdomain?< / p>

注1:主机名在主机名--fqnd,/ etc / hosts,/ etc / sysconfig / network和/ proc / sys / kernel / hostname

中正确设置

注2:我在PHP中使用Swift Mailer,虽然这可能无关紧要。

3 个答案:

答案 0 :(得分:0)

我相信如果你没有通过localhost地址连接到服务器,而是连接到它分配的真实IP地址或完全限定的域名,它会更好。

答案 1 :(得分:0)

认真考虑使用Swift Mailer的“NativeMail”甚至是“Sendmail”界面。

这两个选项都可以避免网络流量,内部IP地址和收到的标头。它们也会明显加快,这对你来说很重要。

如果您坚持使用SMTP,请注意Swift使用$_SERVER["SERVER_ADDR"]变量“自动检测”本地主机名(在SMTP对话框中提供),该变量不会由CLI设置。

如果你不能安排这个有更好的值,你可以将它作为第二个参数传递给Swift构造函数,如:

$swift = new Swift(new Swift_Connection_SMTP("localhost"), "my_domain_here");

答案 2 :(得分:0)

这是我用来获取主机名值到我的crons的一些php代码:

//get hostname info from /etc/sysconfig/network
preg_match('/HOSTNAME=(.*)/', file_get_contents('/etc/sysconfig/network'), $network);
$hostname = split("\=", $network[0]);
echo $hostname[1]; //this equals the value of your HOSTNAME