2

私はPHPネイティブmail()関数を使用してHTMLメールを送信していますが、ユーザーの最も一般的なメールクライアントであるOutlook 2007他のいくつかのメールクライアントに加えて)でフォーマットの問題があります-すべてのhtmlタグが公開されているため、非Web開発者。

PHPのマニュアルでデモするのと同じ方法でHTMLメールを送信しています。例:

$message  = get_HTML_email_with_valid_formatting();
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$headers .= "From: example.com <info@example.com>\r\n";
$headers .= "Reply-To: donotreply@example.com\r\n";
mail('me@example.com', 'test', $message, $headers);

さまざまな電子メールクライアントのテストは難しいため、 http://litmusapp.com/にサインアップして、47の異なる電子メールクライアントの電子メールのスクリーンショットを見ることができます。ほとんどは問題ありませんが(Gmail、Thunderbird、Lotus Notesなど)、Outlookのすべての異なるバージョンは問題ありません。

フォーマットの問題を修正するために、私は次のことを行いました。

  1. $headers = "MIME-Version: 1.0\r\n";メールヘッダーを削除します。
  2. ヘッダーを「\n」ではなく「」のみで終了するようにしてください\r\n

マニュアルに準拠していないのに、なぜHTMLメールでより良い結果が得られるのか誰かが知っていますか?

情報:

  • RHEL5.5でpostfixバージョン2.3.3を使用しています。
  • PHPバージョン5.3.2
4

4 に答える 4

4

postfix<2.9 を使用する場合は、sendmail_path = "tr -d '\r'|sendmail -t -i"php.ini に入れるだけです。

于 2012-02-08T14:00:44.757 に答える
2

2 つの解決策があります。

  1. Postfix を "sendmail_fix_line_endings" を持つ +2.9 にアップグレードします (ついに!!!) 参照: Postfix のドキュメント
  2. Sendmail をインストールします (正常に動作します!)

LAMP スタックを含む VMware イメージがあります。メールを送信するために、最終的に次のことを決定しました。

  • Sendmail をインストールする
  • ISP の smtp を使用します (これは単なる開発ボックスであるため)。

sendmail の部分については、http: //www.geoffke.be/nieuws/13/に従ってください。

重要: 一部のウェブホスティング業者は、安定したパッケージのみを使用している場合があります。つまり、2.9 より古い Postfix を使用できます!!! 例: http://packages.debian.org/search?keywords=postfix

于 2011-10-31T23:30:30.607 に答える
0

私のバージョンの Postfix だと思います。バージョン 2.3.3 は5 年前のもので、おそらく LF を CRLF に変換していますが、既に CRLF を持っているので、CRCRLF をメール クライアントに送信していたと思います。

残念ながら、私は Postfix をアップグレードする状況にありません。したがって、現時点では、コードを変換して、行末に構成可能な変数を使用するようにしました。これにより、将来簡単に変更できるようになります。

$eol = "\n";
$message  = get_HTML_email_with_valid_formatting();
$headers  = "MIME-Version: 1.0".$eol;
$headers .= "Content-Type: text/html; charset=UTF-8".$eol;
$headers .= "From: example.com <info@example.com>".$eol;
$headers .= "Reply-To: donotreply@example.com".$eol;
mail('me@example.com', 'test', $message, $headers);
于 2010-08-11T07:54:02.460 に答える
-1

電子メールは、意図した html ではなく text/plain として解釈されました。これは、text/htmlがマルチパート サブタイプであるため、境界宣言が必要になるためです。

コードにヘッダー境界宣言がありません:

$message  = get_HTML_email_with_valid_formatting();
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "--$boundary\r\n"."Content-Type: text/html; charset=ISO-8859-1\r\n";
$headers .= "From: example.com <info@example.com>\r\n";
$headers .= "Reply-To: donotreply@example.com\r\n";
mail('me@example.com', 'test', $message, $headers);

MIME とマルチパート メッセージに関するこの wiki を確認してください: http://en.wikipedia.org/wiki/MIME#Multipart_messages

于 2010-08-10T14:22:43.963 に答える