2012-05-31 50 views
0

我試圖從PHP發送電子郵件,雖然它正在工作,但我注意到我在電子郵件的「發件人」部分中收到了很多額外的東西。額外的東西,我是假設,是從我的服務器的信息 ?PHP電子郵件中的額外字符「from」字段

例如,如果​​,而不是隻"myname"從現場的電子郵件爲即將通過,我得到的是這樣的:

[email protected]

這是我的PHP我有,重要的部分是我$from VAR玩:

$from = "myname"; 

mail($to,$formSubj,$formMssg,$from); 

誠實這就是我所擁有的一切,沒有更多或更少(就$from而言)。我該如何清理它或使其只能在"myname"這個簡單的值$from出來?

回答

2

郵件功能的第4個參數不能這樣工作。它期望標題信息。爲了達到你想要做什麼用:

$header = "From: myname <[email protected]> \r\n"; 
mail($to,$formSubj,$formMssg,$header); 

你不應該使用一個孤獨myname無論是。您需要有效的電子郵件地址字符串:myname <[email protected]>[email protected]。如果你只是把myname,PHP會試圖把它解釋爲一個電子郵件地址。這就是你得到[email protected]的原因。 p3nlhg.phx3.secureserver.net必須是您的服務器的主機名。

關於header參數的一個好處是您可以使用它來指定其他不常用的字段。例如爲:

$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
$headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n"; 
$headers .= 'Cc: [email protected]' . "\r\n"; 
$headers .= 'Bcc: [email protected]' . "\r\n"; 

注意,您需要放置在每個報頭屬性的末尾回車/換行符(\r\n)。簡單的換行不起作用。

+0

表示「<[email protected]>」這個電子郵件應該是誰的部分? – somdow

+0

你的答案奏效了,它清理了標題「from」字段。我的問題是,當我添加(複製/粘貼)上面的東西(我當然編輯它)它不工作,當我刪除這行「$頭=」MIME版本:1.0「。」\ r \ n「; 「 , 有用。知道爲什麼?這很重要嗎? – somdow

+0

MIME-Version標頭適用於所有意圖和目的。所以你不需要指定它。有關解釋:http://en.wikipedia.org/wiki/MIME#MIME-Version 答案的這一部分只是一個示例,顯示您可以在電子郵件標題中指定哪些內容。我沒有自己編寫它,它來自對PHP郵件功能文檔頁面的評論(http://php.net/manual/en/function.mail.php#example-3150) –

-1

它來自您的服務器中安裝的郵件服務器,嘗試切換到另一個郵件服務器,如postfix,courier或別的。

2

根據mail documentation,您使用$from作爲$additional_headers參數。

改爲將$from更改爲適當的標題。例如,

$from = "myname"; 
$headers = "From: $from <[email protected]>"; 
mail($to, $formSubj, $formMssg, $headers); 

根據文檔爲additional_headers

發送郵件時,所述郵件必須包含的報頭。這可以通過additional_headers參數來設置,或者可以在php.ini中設置默認值。

未能執行此操作將產生類似於的錯誤消息警告:mail():「sendmail_from」未在php.ini中設置或自定義「From:」標題缺失標題集還返回路徑在Windows下。

相關問題