2010-11-19 25 views
1

PHPを使用してHTML形式のメールを送信する際に問題が発生しましたmail() 問題はヘッダーにあると思います。私は、単一引用符または二重引用符のわずかな違いで2つのヘッダが含まれている:PHPのメールヘッダーが正常に動作しない

ヘッダ1:私は上記のように単一引用符を使用する場合

$headers = 'From: [email protected]\r\n Reply-To: [email protected]'; 
$headers .= '\r\nContent-Type: multipart/alternative; boundary="'.$random_hash.'"'; 

、すべての私のhtmlコードをメールで印刷され適切なHTML書式設定なしで単純なテキストとして。また、私のヘッダーは、\r\nが欠落した後にすべてのものが混乱して表示されます。

ヘッダ2:この1を使用して

$headers = "From: [email protected]\r\nReply-To: [email protected]"; 
$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"".$random_hash."\""; 

、私は完璧なヘッダを取得しますが、今、私のメールが空の添付ファイル付きの空に送信されます。私は自分のメールに何も付いていないので、どこから来るのか分かりません。

あなたは\ rを\などの文字をエスケープあなたのPHPの文字列に単一引用符を使用nは動作を停止する場合は

答えて

5

をどうするかを提案してください。

私は文脈なしであなたの添付ファイルを手助けする方法がわかりません。

4

私はPHPのメールが好きではありません。私はXpertMailerを使うことをお勧めします:http://www.xpertmailer.com/素晴らしい仕事をしてください。

+0

+1いいライブラリですが、それをまだ見ていません。よく見える! –

3
  • あなたはラウンドにそれを作ることができない場合は車輪の再発明をしないでくださいlibrary
  • を使用してください。
  • libraryを使用してください!
+3

私はフレーズを立てることができません*ホイールが本質的に完璧であるという前提が必要なので、ホイールを再製作しないでください(そしてフレームワーク/ライブラリが完璧なときから)...しかしあなたは拡張Iです思考は正しいポイントの家をプッシュ... +1 – ircmaxell

0

これは私がphpmailerに切り替える前に使用したものです。前述のようにライブラリを使用します。

// Make email headers 
$separator = '--==Multipart_Boundary_'.md5(time()); 
$eol = PHP_EOL; 

$filepath = "filename.pdf"; 
// open pdf file 
$handle = fopen($filepath, "r"); 
// read pdf file 
$f_contents=fread($handle,filesize($filepath)); 
// encode read pdf file 
$attachment = chunk_split(base64_encode($f_contents)); 
// close pdf file 
fclose($handle); 
$message = "Text goes here"; 

// main header (multipart mandatory) 
$headers = "MIME-Version: 1.0".$eol; 
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol; 
$headers .= "Content-Transfer-Encoding: 7bit".$eol; 
$headers .= "X-Priority: 1 (Highest)".$eol; 
$headers .= "X-MSMail-Priority: High".$eol; 
$headers .= "Importance: High".$eol; 

// message 
$headers .= "--".$separator.$eol; 
$headers .= "Content-Type: text/plain; charset=utf-8".$eol; 
$headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol; 
$headers .= $message.$eol; 

// attachment 
$headers .= "--".$separator.$eol; 
$headers .= "Content-Type: application/pdf; name=".$filename.$eol; 
$headers .= "Content-Transfer-Encoding: base64".$eol; 
$headers .= "Content-Disposition: attachment; filename=".$filename.$eol.$eol; 
$headers .= $attachment.$eol.$eol; 
$headers .= "--".$separator."--"; 
0

あなたは、実際には2つのバージョンがマルチパートの境界で(プレーンテキスト/ HTML)を定義していないなら、あなたは、コンテンツタイプに変更する必要がありますあなたのメール本文のための適切なコンテンツタイプのマルチパート/代替手段を。

PHPMailerなどのライブラリはPHPのネイティブmail()関数よりも一般に好まれます。なぜなら、複雑なヘッダを手作業で作成する必要がなく、柔軟性が非常に高いからです。

+0

PHPMailerそれをした... thnks – Anubhav

関連する問題