2011-10-28 14 views
2

私のメール機能を設定するのに少し問題があります。私は自分のHTMLテンプレートを自分のクラスファイルとは別にしておくことができるように設定しようとしています。私は以下のようなことをしたいと思っていました。mail()関数 - HTMLテンプレートを送信する

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

本当に長いメッセージ文字列以外にも、それが好きではないようですが、

種類が

答えて

1

についてはfile_get_contents代わりのincludeを試してみてください。 includeは、コンテンツを返すだけでなく、ファイルを処理してストリームに出力します(クライアントに送信されるデータ)。さもなければ、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がクライアントに出力されます。 include()戻り値は、成功/失敗を示すtrue/false値です。

それは悪いデザインだが、あなたはこのような何かしたいと思います:output bufferingの機能が含まれ、あなたが渡すことの$ email_textのVAR、にそれを返すの「出力」をキャプチャします

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

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

をmail()関数に渡します。

このメソッドは、.htmlページをPHPとして実行する場合にのみ必要です。本当に単純なhtmlの場合は、代わりにfile_get_contents()を使用すると、PHPの解析/コンパイル/実行シーケンスが保存されます。

+1

OB(出力バッファリング)は、読んでいるファイルを処理するためにPHPが必要な場合にのみ必要です。あなたが内容を追うだけの場合は、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

ありがとうAhmed、 file_get_contents()を使用してHTMLではなくプレーンテキストとして解析されているようですが、 – user863739

関連する問題