2011-07-09 64 views
1

我試圖讓PHP通過「郵件()命令來發送郵件,在Ubuntu的Linux操作系統中的郵件似乎是去,然後通過發送郵件越來越下降了 - 而我不知所措瞭解sendmail的配置

php mail()函數返回true。郵件未發送。我設置了evolutoin以在本地主機上提供vi SMTP,並且發送了一封電子郵件給同一個用戶 - 它是交付。

的/var/log/mail.log文件包含以下條目。

Jul 9 15:15:34 anake postfix/pickup[1292]: 02879340040: uid=33 from=<www-data> 
Jul 9 15:15:34 anake postfix/cleanup[2079]: 02879340040: message-id=<[email protected]> 
Jul 9 15:15:34 anake postfix/qmgr[1293]: 02879340040: from=<[email protected]>, size=411, nrcpt=1 (queue active) 
Jul 9 15:15:36 anake postfix/smtp[2082]: 02879340040: to=<[email protected]>, relay=smtp.ntlworld.com[81.103.221.11]:25, delay=2.3, delays=0.1/0.02/2.1/0.13, dsn=5.0.0, status=bounced (host smtp.ntlworld.com[81.103.221.11] $ 
Jul 9 15:15:36 anake postfix/cleanup[2079]: 5370B340042: message-id=<[email protected]> 
Jul 9 15:15:36 anake postfix/bounce[2083]: 02879340040: sender non-delivery notification: 5370B340042 
Jul 9 15:15:36 anake postfix/qmgr[1293]: 5370B340042: from=<>, size=2228, nrcpt=1 (queue active) 
Jul 9 15:15:36 anake postfix/qmgr[1293]: 02879340040: removed 
Jul 9 15:15:36 anake postfix/local[2084]: 5370B340042: to=<[email protected]>, relay=local, delay=0.03, delays=0/0.02/0/0, dsn=2.0.0, status=sent (delivered to mailbox) 
Jul 9 15:15:36 anake postfix/qmgr[1293]: 5370B340042: removed 

我不詳細說明它從哪裏得到「from」地址。執行實際的代碼是這樣的: -

<?php 
    $to  = '[email protected]'; 
    $subject = 'Test email'; 
    $message = 'hello - this has gone round the loop'; 
    $headers = 'From: [email protected]' . "\n" . 
       'Reply-To: [email protected]' . "\n" . 
       'X-Mailer: PHP/'. phpversion()."\r\n"; 
    if (mail($to, $subject, $message, $headers)) { 
     echo "Message sent OK"; 
    } else { 
     echo "message send failed"; 
    } 

>

任何人都可以發現什麼錯誤,而我能做些什麼呢??電子郵件地址稍微消失得相當明顯。 Ian

回答

3

這裏的「from」是信封寄件人,即最終在Return-Path標頭中的地址。這個標題不能像其他標題一樣改變,因爲這實際上並不是郵件的一部分,而是信封的一部分。返回路徑是反彈被髮送到的地址等。

您可以通過使用mail()函數的第五個參數來更改信封發件人。後綴(您的服務器正在運行的),Sendmail和進出口都能夠使用-f標誌更改發件人:

... 
$extra_parameters = '[email protected]'; 
mail($to, $subject, $message, $headers, $extra_parameters); 
+0

感謝埃米爾 - 這工作了魅力。其實,我結束了設置sendmail_path線在php.ini以 「sendmail_path =/usr/sbin目錄/ sendmail的-t -i -r [email protected]」(這做同樣的事情)。再次感謝。 – Ian