2009-03-05 36 views
1

如果我編寫一個PHP腳本連接到SMTP服務器(在我的情況下,這是本地安裝的Postfix)併發送一封電子郵件,電子郵件中的第一個「收到」標題爲:PHP主機名綁定

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) 

這是因爲PHP CLI是由一個普通的Linux用戶調用(通過一個cron)。

如何讓PHP CLI綁定到主機名/ IP,以便當用戶通過cron作業調用它時,「received」標題顯示服務器主機名/ IP而不是localhost.localdomain?

注1:主機名在主機名--fqnd正確設置,/ etc/hosts中,在/ etc/SYSCONFIG /網絡和/ PROC/SYS /內核/主機名

注2:我在PHP中使用Swift Mailer,雖然這可能是不相關的。

回答

0

請認真考慮使用Swift Mailer的「NativeMail」或甚至是「Sendmail」界面。

這兩個選項都將避免網絡流量,內部IP地址和收到的問題頭。它們也將顯着更快,這對您可能很重要。

如果您堅持使用SMTP,請注意,Swift使用$_SERVER["SERVER_ADDR"]變量「自動檢測」本地主機名(在SMTP對話框中提供),CLI不會設置該變量。

如果無法安排這有一個更好的價值,你可以將它傳遞給斯威夫特構造函數的第二個參數,如:

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

我需要設置第二個Swift構造函數參數,因爲如您所說,SERVER_ADDR未在CLI中設置。 – DavidM 2009-03-08 16:28:19

0

我相信如果您不通過本地主機地址連接到服務器,而是通過連接到其分配的真實IP地址或完全限定的域名,它會更好。

+0

這沒有什麼區別。 – DavidM 2009-03-05 19:48:04

0

這裏是我用來獲取價值的一些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