1

助けてください。PHPmail() を使用して HTML 形式のメール メッセージを送信する際に問題が発生しています。問題はヘッダーにあると思います。一重引用符または二重引用符のみがわずかに異なる 2 つのヘッダーを含めました。

ヘッダー 1:

$headers = 'From: webmaster@example.com\r\n Reply-To: webmaster@example.com';
$headers .= '\r\nContent-Type: multipart/alternative; boundary="'.$random_hash.'"'; 

上記のように一重引用符を使用すると、すべての html コードが適切な html フォーマットなしで単純なテキストとしてメールに出力されます。\r\nまた、私のヘッダーは、欠落した後にすべてがめちゃくちゃに表示されます。

ヘッダー 2:

$headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com";
$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"".$random_hash."\"";

これを使用すると、完璧なヘッダーが得られますが、メールは空の添付ファイル付きで空の状態で送信されます。メールに何も添付しないので、それがどこから来たのかわかりません。

何をすべきか提案してください

4

5 に答える 5

5

PHP 文字列で単一引用符を使用すると、\r\n などのエスケープ文字が機能しなくなります。

これ以上のコンテキストがないと、あなたの愛着をどのように支援できるかわかりません.

于 2010-11-19T20:34:51.457 に答える
4

私はPHPメールが好きではありません。XpertMailer: http://www.xpertmailer.com/を使用することをお勧めします。

于 2010-11-19T20:38:51.123 に答える
3
  • ライブラリを使用する
  • 丸くすることができない場合は、車輪を再発明しないでください。
  • ライブラリを使おう!
于 2010-11-19T20:39:50.833 に答える
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."--";
于 2010-11-19T20:40:55.053 に答える
0

マルチパート境界で 2 つのバージョン (プレーンテキスト/HTML) を実際に定義していない場合は、Content-type: multipart/alternative をメール本文の適切なコンテンツ タイプに変更する必要があります。

さらに、PHPMailer などのライブラリは、mail()複雑なヘッダーを手動で作成する必要がなく、柔軟性が大幅に向上するため、PHP のネイティブ関数よりも一般的に好まれます。

于 2010-11-19T20:41:03.413 に答える