Привязки имени хоста PHP - PullRequest
1 голос
/ 05 марта 2009

Если я напишу сценарий 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.

Однако, если я выполню тот же сценарий из CLI PHP, то вместо него появится первый «полученный» заголовок:

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 заголовок «полученный» отображал имя хоста / IP сервера вместо localhost.localdomain?

Примечание 1: имя хоста правильно задано в имени хоста --fqnd, / etc / hosts, / etc / sysconfig / network и / proc / sys / kernel / hostname

Примечание 2: Я использую Swift Mailer в PHP, хотя это, вероятно, не имеет значения.

Ответы [ 3 ]

0 голосов
/ 06 марта 2009

Рассмотрите возможность всерьез использовать «NativeMail» Swift Mailer или даже интерфейс «Sendmail».

Обе эти опции позволяют избежать сетевого трафика, внутреннего IP-адреса и рассматриваемого заголовка Received. Они также будут значительно быстрее, что может быть важно для вас.

Если вы настаиваете на использовании SMTP, обратите внимание, что Swift «автоматически определяет» имя локального хоста (которое указывается в диалоге SMTP) с помощью переменной $_SERVER["SERVER_ADDR"], которая не будет установлена ​​CLI.

Если вы не можете сделать так, чтобы это значение было лучше, вы можете передать его конструктору Swift в качестве второго аргумента, например:

$swift = new Swift(new Swift_Connection_SMTP("localhost"), "my_domain_here");
0 голосов
/ 28 мая 2009

Вот некоторый 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
0 голосов
/ 05 марта 2009

Я полагаю, что это будет работать лучше, если вы не подключитесь к серверу по адресу localhost, а вместо этого подключитесь к его назначенному реальному IP-адресу или полному доменному имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...