2011-10-28 35 views
2

我在配置郵件功能時遇到了一點麻煩。我一直在試圖設置它,以便我可以將我的HTML模板與我的類文件分開。我想做下面的事情。mail()函數 - 發送HTML模板

mail('[email protected]', 'subject here', include('email/template.html'), '[email protected]'); 

雖然似乎很喜歡它,它不會,反正是有做到這一點以外有一個很長的消息字符串?

親切的問候

回答

1

嘗試file_get_contents,而不是includeinclude處理文件並輸出到流(數據發送到客戶端),而不僅僅是返回內容 - 否則您始終是echo include('...')

儘管實際上,如果您正在尋找這種「高級」能力(並且您的主機支持它)PEAR Mail是一個更好的選擇。

+0

謝謝你的選擇似乎工作,雖然它不是解析爲Html而是純文本。我需要更新標題嗎? – user863739

+0

@ user863739:您可以創建一個新的[Mail_mime](http://pear.php.net/manual/en/package.mail.mail-mime.example.php)並播放內容類型,是的。 –

1

include()不返回文件的內容。它執行該文件。這意味着文件中的任何PHP代碼都會執行,並且任何「裸」html都會輸出到客戶端。 ()返回的唯一值是表示成功/失敗的真/假值。

這是一個不好的設計,但你想要的東西是這樣的:

ob_start(); 
include('email/template.html'); 
$email_text = ob_get_clean(); 

mail('[email protected]', 'subject', $email_text, ....); 

output buffering功能將捕捉到的包括並將其返回到該$ EMAIL_TEXT變種,然後您可以通過「輸出」到mail()函數。

請注意,只有當您希望將.html頁面作爲PHP執行時才需要此方法。如果它真的只是普通的html,那麼可以使用file_get_contents()來代替,這爲您節省了一個PHP解析/編譯/執行序列。

+1

就像說明一樣,只有當您需要PHP來處理您正在嘗試閱讀的文件時,才需要OB(輸出緩衝)。如果你只是追求內容,fopen/fread/fclose或file_get_contents是一個更好的方法。 - **編輯**它看起來像你更新你的文章,包括我的意見基本上提到。 ;-) –

1

你「包括()」語句被濫用...試試這個:

$template = file_get_contents('email/template.html'); 
mail('[email protected]', 'subject here', $template, '[email protected]'); 

不要使用include指令,除非你實際上是包括要解釋爲部分文件頁面 - 這是糟糕的編程習慣。上面的答案使用ob_start()include()ob_get_clean();以一種討厭的方式工作;它將實際執行包含爲PHP腳本。現在,如果模板由用戶填充並由您保存,用戶將能夠使用此構造在服務器上執行任意PHP代碼。壞壞壞。

+0

謝謝艾哈邁德, 雖然它似乎被解析爲純文本而不是HTML使用file_get_contents() – user863739