読めないメールSubjectはMIMEヘッダフィールドエンコードされてるかも。デコード方法を紹介します

シェアする

メールを記録していると、Subject欄が、 Subject: =?ISO-2022-JP?B?PHN0cm9uZz4bJEIlRiU5JUgbKEI8?= などと人間が読めないような場合があります。

これはMIMEヘッダフィールド用にエンコードされているからです。

この記事では、PHPでMIMEヘッダフィールドをデコードする方法と、公開しているウェブツールを紹介します。

MIMEヘッダフィールドのデコード方法

デコードに使えるPHP関数

iconv_mime_decode  を使います。

使い方

引数

encoded: MIMEヘッダエンコードされた文字列

mode: 関数の動作を定義。0で問題ないです。

定数 意味
1 ICONV_MIME_DECODE_STRICT RFC2047に完全準拠する形式でデコードします。デフォルトで無効。実際は間違ったMIMEヘッダも多いため、OFFが良いです。

2 ICONV_MIME_DECODE_CONTINUE_ON_ERROR

iconv_mime_decode_headers()関数でこの定数を指定すると、文法的なエラーを無視してデコードを継続。

charset: 結果文字列の文字コードを指定。指定しなかったときは、iconv.internal_charsetが使用されます。

戻り値

成功したらデコードされたMIMEフィールドの文字列を返答します。
エラー発生したら、false を返します。

デコードするウェブページの例

iconv_mime_decodeを使ったデコードの例として、ウェブページのフォームにMIMEヘッダ用にエンコードされた文字列を入力したら、デコードした結果を表示するウェブページの例を紹介します。

サンプルコード

以下のコードを、 mime_decoder.php として保存します。

動作例

ブラウザで開くと、下図のようにテキスト入力と「変換」ボタンがついたフォームが表示されます。

対象文字列に MIMEヘッダ用にエンコードされた文字列を入力し、「変換」を押すと変換結果が表示されます。

例えば、

と入力して、「変換」ボタンを押すと、下図のように結果が表示されます。

※ローカル環境でウェブページの開発環境の構築方法は、
記事「Windowsにウェブ開発環境を入れよう:MySQL付きXAMPPのインストール手順」、「Windows10にXAMPPでサーバー開発。複数のウェブサイトのテスト方法」などで紹介しています。

サンプルコードの解説

・POSTデータの取得

フォームで「変換」ボタンを押した場合、POSTで「str_pre」キーに変換対象の文字列がブラウザから送られてきます。この部分では、「str_pre」キーが存在して、何かしら文字列が入力されていたら、 $str_pre に入力しています。

・フォーム前半

フォームの定義です。ボタンが押されたとき、同じファイルである「mime_decoder.php」に、POSTでデータ送信をするよう設定しています。

textareaはテキストボックスで、$str_pre を表示しています。

・フォーム後半

$str_pre に何かしら文字が入っていた時だけ、28-31行を表示します。
テキストボックスは、読み出し専用に設定し、iconv_mime_decode 関数を使って、$str_pre 文字列をデコードした結果を表示しています。

MIMEヘッダのデコーダを公開

この記事で紹介したMIMEヘッダのデコーダのウェブページを公開しています。
さくっと、変換だけできればよい人は、アクセスして使ってみてください。

→ 読めないメールヘッダを変換!MIMEデコードツール

まとめ

メールのヘッダ情報を確認したとき、Subjectだけ文字化けしている場合に、MIMEヘッダエンコードされている場合があります。

この記事では、PHPを使ってMIMEヘッダのデコードする方法を紹介しました。

また、デコードツールを公開してURLを紹介しました。

Subjectが読めず困っている人は、ぜひ、利用してみてください。

この記事が気に入ったら
いいね ! しよう