sendmailでhtml電子メールを送信/送信しようとしましたが、電子メールのソースコードを表示しています

PHPでHTML形式の電子メールを送信しようとしていますが、電子メールプログラムの電子メールのソースコードが常に表示されます。しかし、htmlの電子メールをHTMLとして表示し、電子メールのコンテンツとしてソースコードを表示しないでください。

私はこのような私の電子メールを送る:

$fd = popen("/var/qmail/bin/sendmail -t","w") or die("Couldn't Open Sendmail"); 
    fputs($fd, "To: ".$to2." \n"); 
    fputs($fd, "From: \"Test \" \n"); 
    fputs($fd, "Subject: ".$subject." \n"); 
    fputs($fd, "X-Mailer: PHP5 \n"); 
    fputs($fd, "Mime-Version: 1.0 \n");
    fputs($fd, " \n");
    fputs($fd, "--".$mime_boundary."");
    fputs($fd, "Content-Type: text/html; charset=\"utf-8\"; boundary=\"".$mime_boundary."\" \n");
    fputs($fd, "Content-Transfer-Encoding: quoted-printable \n");   
    fputs($fd, " \n");
    fputs($fd, $sendmail_body." \n"); 
    fputs($fd, "".$mime_boundary."--");
    pclose($fd);

htmlファイルの内容は次のようになります。



<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>

</head>
<body>
</body>
</html>

それは今働いた:

$ fd = popen( "/ var/qmail/bin/sendmail -t"、 "w")またはdie( "Could not Open   fputs($ fd、 "To:"。$ to1。 "\ n"); fputs($ fd、 "From:   \ "テスト\" \ n ");         fputs($ fd、 "Subject:"。$件名 "\ n"); fputs($ fd、 "X-Mailer:   PHP5 \ n "); fputs($ fd、" Mime-Version:1.0 \ n ");         fputs($ fd、 "Content-Type:multipart/alternative; boundary = \" "。$ mime_boundary。" \ "\ n"); fputs($ fd、 "\ n");         fputs($ fd、 " - "。$ mime_boundary。 "\ n"); fputs($ fd、 "Content-Type:   text/html; charset = \ "utf-8 \" \ n "); fputs($ fd、   "コンテンツ転送エンコーディング:quoted-printable \ n"); fputs($ fd、 "   \ n "); fputs($ fd、$ sendmail_body。" \ n "); fputs($ fd、   " - "。$ mime_boundary " - \ n"); pclose($ fd);

そして、私のhtmlファイルの最初の行は空です。あるいは、htmlの内容の前に\ nを追加します。

1
私はいくつかの行を忘れて私の質問を編集しなければならなかった
追加された 著者 Daniel Ruf,

3 答え

私はいくつかのクライアントがhtmlメールをサポートしていないか、単純なテキストを好むので、multipartを送ることを検討すべきだと思います:

$headers = "From: Example \r\n
    MIME-Version: 1.0\r\n
    Content-Type: multipart/alternative; boundary={$mime_boundary}\r\n
    X-Mailer: PHP5";

$message = "This is a MIME-Message. If you can read this your client does not support the MIME format.\r\n
\r\n
{$mime_boundary}\r\n
Content-Transfer-Encoding: quoted-printable\r\n
Content-Type: text/plain; charset=utf8;\r\n
\r\n
Text Content encoded in quoted printable
\r\n
\r\n
{$mime_boundary}\r\n
Content-Transfer-Encoding: quoted-printable\r\n
Content-Type: text/html;charset=utf8;\r\n
\r\n
HTML Content encoded in quoted printable
\r\n
--{$mime_boundary}";

mail($to, $subject, $message, $headers);

sendmailのパスとパラメータがphp.iniで正しく設定されている限り、これはsendmail経由でmultipart/alternativeの形式でメールを送信します。

2
追加された
\ nまたは\ r \ n?あなたは私を混乱させています
追加された 著者 Daniel Ruf,
そのUnixマシン/ WebサーバーはLinux上で動作していますので、私はいけませんね?時々?だから私は間違いなく\ r \ nを使うべきですか?
追加された 著者 Daniel Ruf,
\ nはUNIXのような方法ですが、Windowsは\ r \ nとMac OSだけを\ r - so \ r \ nはすべてのシステムで改行を行います。\ r \ nまたは\ nはメールの文脈の違いですが、時々彼らはそうします...
追加された 著者 Hikaru-Shindo,
受信者が使用するメールサーバーソフトウェアによって異なります。しかし、ほとんどのデーモンは\ nだけでうまくいくはずです。
追加された 著者 Hikaru-Shindo,

これは私のために働いた:

<?php
$message=<<
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>

</head>
<body>
</body>
</html>
--frontier--
EOL;

$fd = popen("/var/qmail/bin/sendmail -t","w") or die("Couldn't Open Sendmail");

fputs($fd, "To: ".$to." \n");
fputs($fd, "From: \"Example\"  \n");
fputs($fd, "Subject: ".$subject." \n");

fputs($fd,"MIME-Version: 1.0\n");
fputs($fd,"Content-type: multipart/alternative; boundary=\"frontier\"\n\n");
fputs($fd,"This is a message with multiple parts in MIME format.\n");

fputs($fd, $message);
pclose($fd);
?>

I hope it will be helpful

1
追加された
とhtmlファイルの私のdoctype? Transfer-Encoding、Content-Typeなど、これらのすべてを今変更する必要があります...
追加された 著者 Daniel Ruf,
それを試しました(私はhtmlファイルでdoctypeを使用しています)が、受信メールは空です(outlook、ソースコードは電子メールには存在しません)。そしてiphoneにはsourcecodeが表示されます
追加された 著者 Daniel Ruf,
fputs($fd, "X-Mailer: PHP5 \n\n"); 

2番目の\ nはヘッダー終了の兆候であるため、削除してください。

0
追加された
それは動作しますか?
追加された 著者 Daniel Ruf,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com