1

PHP経由でメールを送信するためのこのコードがあります:

// Prepare email.
$headers = "From: Mi9 Vault <info@mi9vault.com.au>\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=ISO-8859-1";

$msg = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/edm/confirmation.html');
$msg = str_replace('{first_name}', $contact["First Name"], $msg);


// Send email
mail($contact["Email Address"], "Your Mi9 Registration is Confirmed", $msg, $headers);

confirmation.html設定した HTML メールです。

メール送信用の上記の PHP コードで問題が発生したことはありませんが、実際の HTML 形式のメールではなく、すべての HTML を含むメールしか返されないようです。

基本的に、これを内容とするメールを受け取ります。

MIME-Version: 1.0

Content-type: text/html; charset=ISO-8859-1
Message-Id: <20120418080325.C643B407EF@ds3219.dreamservers.com>
Date: Wed, 18 Apr 2012 01:03:25 -0700 (PDT)

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    </head>
    <body>
        .....

同じホストの別のWebサイトに同じPHPコードがあり、正常に動作します...

4

5 に答える 5

7

どういうわけか、ヘッダーの 2 行ごとに余分な改行があるようです。あなたのコードがそれらをそこに置いていないので、どうやってそれが起こるのか、私にはわかりません。受信メールサーバーが何らかの形でめちゃくちゃになり\r\n、1 つではなく 2 つの改行として解釈される可能性があります。まず、\r残すだけを削除して\n、何が起こるかを確認します。これがRFCごとに適切ではないことは知っていますが、それから始めてください。

気分を良くするために、私は非常によく似たコードを使用しています-そして、電子メールは正しく配信されます.

于 2012-04-18T08:14:09.083 に答える
2

どのプラットフォームで実行しているか、どのメーラーが mail() を使用しているかはわかりません。あなたが使用しているメーラーは、\n が区切り記号であると想定しているようです。\r\n または \n の代わりに PHP_EOL を使用できます。その場合、実行中のプラットフォームで使用される行区切り記号が使用されます。

Linux/Unix システムの場合、

ヘッダーの改行は、PHP が実行されているシステムのネイティブの改行でなければなりません。

mail() 関数は SMTP サーバーと通信しないため、RFC2822 はここでは適用されません。mail() はローカル システム上のコマンド ライン プログラムと通信しており、そのプログラムがシステム ネイティブの改行を要求することを期待するのは合理的です。

ソース

長期的には、いくつかの同様の問題が一般的に整理されている mail() の代替手段を使用することを検討してください。mail() は非常に「生の」関数であり、ヘッダー インジェクションを含むいくつかの問題があります。この種の問題は、たとえばSwift MailerPHPMailerですでに解決されています。

于 2012-04-18T08:30:44.553 に答える
0

変更してみてください:

$headers = "From: Mi9 Vault <info@mi9vault.com.au>\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=ISO-8859-1";

$headers = 'From: Mi9 Vault <info@mi9vault.com.au>' . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
于 2012-04-18T08:15:26.103 に答える
0

html メールから html と head タグを削除してみてください。HTML の余分なタグを追加する必要のないコンテンツに単純な html を配置するだけです。body 開始タグの後に html タグを開始します。

于 2012-04-18T08:24:06.020 に答える