2012-01-03 14 views
0

我曾嘗試,但收效甚微如下:PHP郵件()使用發送郵件「匿名@ ...」

$fromEmail = "something.com <[email protected]>\r\n"; 

    $headers = 'From: '.$fromEmail; 
    $headers .= 'Reply-To: '.$fromEmail; 
    $headers .= 'Return-Path: '.$fromEmail; 
    $headers = 'MIME-Version: 1.0' . '\n'; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . '\r\n'; 

    if(mail($to, $subject, $message, $headers)) { echo "1"; exit; } 

我已經嘗試註釋掉Reply-To:Return-Path:線以及更換if(...線搭配:

if(mail($to, $subject, $message, $headers,'[email protected]')) { ... 

在電子郵件到達所有的情況,但是從[email protected]

+0

你錯過了CR在MIME版本頭( 'R \ n''的\'而不是''\ n'')。另外,似乎在'$ fromEmail'中包含CRLF是一個壞主意 - 我將它放在構建頭文件的代碼中。 – tomlogic 2012-01-04 00:02:25

回答

3

從地址添加默認有一個在你的代碼中的語法錯誤。

您在MIME標題行中缺少一個點。

應該是:

$headers = 'From: '.$fromEmail; 
$headers .= 'Reply-To: '.$fromEmail; 
$headers .= 'Return-Path: '.$fromEmail; 
$headers .= 'MIME-Version: 1.0' . '\n'; 
<...> 
+0

是的是的,這就是那個!!!!!!!!!!好的1! – Sevenearths 2012-01-03 16:33:22

2

它看起來像匿名@ ...是您的信封「來自」地址。信封「發件人」地址與電子郵件的「發件人:」標題中顯示的地址不同。這是sendmail在其「MAIL FROM/RCPT TO」與接收郵件服務器交換中使用的內容。它被稱爲「信封」地址的主要原因是出現在郵件標題和正文之外,郵件之間的原始SMTP交換服務器。

要更改unix上的信封「發件人」地址,可以爲sendmail二進制文件指定一個「-f」選項。您可以通過在「sendmail_path」命令行中添加「-r」選項在php.ini中全局執行此操作。您也可以通過將-f [email protected]作爲mail()函數的附加參數參數(第5個參數)傳遞,從PHP內部以編程方式執行此操作。

在php.ini,你可以這樣

sendmail_from = [email protected] 
+0

這將應用於所有在域上使用郵件功能的腳本:( – Sevenearths 2012-01-03 16:34:07