2011-08-10 15 views
1

誰でも手伝ってもらえませんか?UTF-8でメールを送信

私は3つの言語(すべて同じコンテンツに - 繰り返し)でいくつかのコンテンツを送信するスクリプトを継承していますが、受信時にUTF-8の問題であると思われるコンテンツ文字が壊れています。

私が必要とするのは、charsetの部分をutf-8に変更するだけですか、それとも7bitの部分のように変更する必要がありますか?

私は(まだテスト)1 UTF-8参照ベースエンコーディングを参照するように思えるここhttp://bitprison.net/php_mail_utf-8_subject_and_message何かが

があったが、挿入位置を確認することができますが、私は私がここにいることを必要とするかどうかわからないんだけど?

おかげ

// Contruct message body. 
       $body = ""; 

       // Add message for non-mime clients. 
       $body .= "This is a multi-part message in MIME format.\n"; 

       // Add text body. 
       $body .= "\n--$boundary\nContent-Type: text/plain; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 7bit\n\n" . $textContent; 

       // Add HTML body. 
       $body .= "\n--$boundary\nContent-Type: text/html; charset=ISO-8859-1; format=flowed\nContent-Transfer-Encoding: 7bit\n\n" . $htmlContent; 

       mail($row["email"], "Update Your ArtsDB Listing", $body, $headers); 

更新されたコードは、これは許容できるでしょうか?私はここに例を挙げて別の投稿を見た。

$body .= "\n--$boundary\nContent-Type: text/plain; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 8bit\n\n" . $textContent; 

      // Add HTML body. 
      $body .= "\n--$boundary\nContent-Type: text/html; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 8bit\n\n" . $htmlContent; 
+1

Swift MailerPEAR Mailは...あなたはそこに3つのエンコーディングを使用します。それはそうより

Eメールは、だからこそ、遅かれ早かれ、あなたは、サードパーティのライブラリを使用して終了、困難です。 –

答えて

4

ような良いのlibを使用しません含む?それは重要なビットです。 Content-Transfer-Encoding: 7bitによれば、7ビットのエンコーディングであるため、未加工のUTF-8にすることはできません。ただし、電子メールに使用される通常の7ビットエンコーディングは使用していません。それ以外の場合は、Content-Transfer-Encoding: quoted-printableヘッダーがあります。

要約すると、以下を行う必要があります

  1. は、有効なUTF-8が含ま元の文字列を持っています。
  2. 転送のエンコードを選択します(quoted_printable_encode()など)。
  3. 選択した転送エンコードを示すヘッダーを追加します。

生のUTF-8をそのまま送信し、Content-Transfer-Encoding: 8bitに設定することもできますが、お勧めしません。非常に長い行を送信するだけでSMTP標準を破る可能性があります。また、どのような種類のレガシープログラムがこれを経由するのか分かりません。 - いずれかを使用しようとするPHP Mailerは、

+0

非常に明確ではなく、あらゆる種類のファイルやライブラリにリンクされているような、すべての未知数を解読しようとする、特注のCMSを継承したので、これはかなり難しいです。私が最初から書いていたら、もっと幸せだったでしょう。 – mro

+0

7ビットを8ビットエンコーディングに変更しました(上部の編集で) – mro

+0

これはオーバーホールで可能かもしれないと私は理解していますが、現時点では通常は文字の修正が昨日求められています! – mro

1

コンテンツ転送エンコード:7ビット

これは意味をなさない - 7ビットのデータと8 +ビット表現の間に直接マッピングが存在しません。どのエンコーディングを使用しているかを示すMIMEヘッダーを変更する必要があります。

SMTPの場合、転送エンコーディングは7ビットのASCII文字セットでなければなりません。あなたのutf8データを変更するには、これをエンコードする必要があります。一般的なエンコーディングはbase64とquoted printableです(PHPは両方のエンコードとデコードのfnsを提供します)。

理由だけではなく、あなたは、このようなメッセージ部分が罰金である、UTF-8を使用していますが、...何が$textContent変数を行うことをメールリーダーを伝えるためにContent-Type: text/plain; charset=UTF-8を使用しているphpmailerまたはswiftmailer

+0

こんにちは、私は自分のやり方を選んでいる(問題は言語の文字が表示されていない)とあまりにも怒らないようにするスクリプトなので、文字セットを変更することができればと思っていました。 – mro

+0

これは私がここで使った例です:<?php $ to = '[email protected]'; $件名= 'Wakeup bob!'; $ message = 'yo、whassup?'; $ headers = "送信元:[email protected] \ r \ n" 'X-Mailer:PHP /'。 phpversion()。 "\ r \ n" "MIME-Version:1.0 \ r \ n" "Content-Type:text/html; charset = utf-8 \ r \ n" "コンテンツ転送エンコーディング:8ビット\ r \ n \ r \ n"; // メールを送信する($件名、$件名、$メッセージ、$ヘッダ); ?> – mro