phpとimapでメールを取得するのに問題があります。各送信者は、異なる文字セットエンコーディングでエンコードされた電子メールを送信するため、私にとって普遍的なソリューションを作成することは困難です。
データを失うことなくfrom、to、subject、body / htmlをUTF-8文字列にフェッチしたい場合、これはどのように簡単に実行できますか?
私は何時間も解決策を見つけようとしましたが、私の現在のコードは問題を解決しません。
ご挨拶。
「imapからメールを取得してutf-8に変換する」とだけ言うことはできません。これでメールパーツを取得する必要があります:
$struct = $this->imap_fetchstructure($this->mbox, $mId, FT_UID);
次に、そのメールから何を選択します。そして、あなたが必要なものを決定した後、それからそれへの変換を言い、それはこのようになります:
if($partStruct->encoding == 1) {
$data = $this->imap_utf8($data);
}
elseif($partStruct->encoding == 2) {
$data = $this->imap_binary($data);
}
elseif($partStruct->encoding == 3) {
$data = $this->imap_base64($data);
}
elseif($partStruct->encoding == 4) {
$data = $this->imap_qprint($data);
}
//etc.....
私はクラスからコピー/貼り付けするだけです。他の部分はあなたが自分で理解する必要があります!これに対する簡単な解決策を探しているなら、何もないと言わせてください。インターネットからいつでもいくつかのimapphpクラスをダウンロードできます。
mb_detect_encoding()
次の関数を使用してみてください:http: //php.net/manual/en/function.mb-detect-encoding.php
そしてmb_convert_encoding()
: http: //php.net/manual/en/function.mb-convert-encoding.phpからUTF-8へ。
電子メールヘッダーを調べて、Content-Typeヘッダーを探すこともできます。例を参照してください。
Content-Type: text/html; charset="UTF-8"