代码之家  ›  专栏  ›  技术社区  ›  davidmytton

PHP主机名绑定

  •  1
  • davidmytton  · 技术社区  · 15 年前

    如果我编写一个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绑定到服务器IP。

    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)
    

    这是因为PHP CLI由普通Linux用户(通过cron)调用。

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

    注1: 在hostname--fqnd、/etc/hosts、/etc/sysconfig/network和/proc/sys/kernel/hostname中正确设置了主机名

    注2: 我正在使用 Swift Mailer 在PHP中,虽然这可能是不相关的。

    3 回复  |  直到 15 年前
        1
  •  0
  •   Zoredache    15 年前

    我相信,如果您不通过本地主机地址连接到服务器,而是通过指定的真实ip地址或完全限定的域名连接到服务器,它会工作得更好。

        2
  •  0
  •   geocar    15 年前

    认真考虑使用斯威夫梅勒的“NATEV电子邮件”,甚至是“sEnmail”界面。

    这两个选项都将避免网络流量、内部IP地址和接收到的相关报头。它们的速度也会明显加快,这可能对您很重要。

    如果坚持使用SMTP,请注意Swift使用 $_SERVER["SERVER_ADDR"]

    如果无法使其具有更好的值,可以将其作为第二个参数传递给Swift构造函数,如下所示:

    $swift = new Swift(new Swift_Connection_SMTP("localhost"), "my_domain_here");
    
        3
  •  0
  •   jjriv    15 年前

    下面是我用来将主机名值输入cron的一些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