2011-03-14 3 views
0

添付ファイル付きのPHPメール()でメールを送信しようとしています。本文にメールが表示されるのはなぜですか/

添付ファイルは、OKを通ってくると体の内容がありますが、私はまた、MIMEの境界とコンテンツタイプを見るのではなく、電子メールというHTML

--==Multipart_Boundary_x9e92752e972e274a182cc4cafd83c674xContent-Type: text/html; charset="iso-8859-1"Content-Transfer-Encoding: 7bit 

<p> 
    Body content</p> 
<p> <snip> 

は、コードは次のようになります。

$mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x"; 

    $headers = "From: $from\r\n" . 
    "MIME-Version: 1.0\r\n" . 
     "Content-Type: multipart/mixed;\r\n" . 
     " boundary=\"{$mime_boundary}\""; 

    $message = "--{$mime_boundary}Content-Type: text/html; charset=\"iso-8859-1\"\r\n" 
    ."Content-Transfer-Encoding: 7bit\r\n\r\n" . $bodyText . "\r\n"; 

     $message .= "--{$mime_boundary}\n" . 
     "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
     "Content-Transfer-Encoding: 7bit\n\n" . 
    $message . "\n\n"; 

then the attachment routine 

私は成功していないコードで多くのバリエーションを試しました。間違いなく、私はちょうど見ることができない些細なものになるでしょう。あなたはそれだけのコードかもしれませんが、区切り文字は、(それがあってはならないもの)インデントすることができるという可能性も境界区切り文字の後に必要なCRLFを逃し、としているように見え事前

答えて

3

正しい行末を2回忘れてしまった。

$message = "--{$mime_boundary}Content-Type" 

最初に\r\nがあります。ここで

$message .= "--{$mime_boundary}\n" . 

あなただけ\nの代わり\r\nを書きました。また

あなたはターミネータとしてクローズダブルマイナスで終わる非常に終了するMIMEバウンダリが必要であることを忘れないでください:ではSwiftMailerのため

$message .= "--{$mime_boundary}--\n" . 
+0

AHA!私は実際に彼らが必要だったことを認識していない、それはレイアウトの事だと思った。これは私がmimeの境界を乱した最初のものであり、喜んでいました。ありがとう – Steve

+0

こんにちは、私はUNIXのsendmailに初心者です。あなたは、電子メール構造の境界が何をしているのか説明してください。 – Mistu4u

+0

@ Mistu4u https://tools.ietf.org/html/rfc2046#page-17を参照してください。 – mario

2

感謝ここでフォーマットする。また、必須のCRLFの代わりに改行のみを使用しているようです。

a mature mailing library, like SwiftMailerを使用して、簡単にMIMEメッセージを組み立てることを真剣に考えてください。

+0

1 ...またはphpmailerのは何だろう...何でも生の 'mail'機能以外のものです。 – prodigitalson

+0

私は過去にphpmailerを使用していましたが、時には過剰殺人のように感じます。しかしそれを心に留めておく。 – Steve

+0

はい。それに対して+1。私は役に立つと思われる記事[here](http://www.webcheatsheet.com/PHP/send_email_text_html_attachment.php)を見つけました。 – isurusndr

関連する問題