ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

古いシステムから送信されるメールをThunderbirdで受信して読むと、文字化けが発生

古いシステムから送信されるメールを、メールソフトのThunderbirdで受信して読む機会がありました。
1年ほど前にも読む機会があり、ちゃんと読めました。
最近受信したメール、1年ほど前に受信したメールのどちらも、文字化けして読めません。

GmailBecky!でも受信して読んでみましたが、文字化けしないでちゃんと読めました。

メールヘッダが正しくない

何が原因なのかと調べると、メールヘッダのContent-Typeが
text/plain
となっているために、文字化けしているようです。
以前から変わっていないのも確認しました。

なぜ1年ほど前はThunderbirdで文字化けしなかったのかと検索しました。
検索した結果、どうやら受信トレイで右クリック→メニューが表示されるので「プロパティ(P)」を選択でプロパティが表示されますが、「フォールバックテキストエンコーディング」が「Unicode(UTF-8)」になっているためのようです。
Thunderbirdのプロパティ
「フォールバックテキストエンコーディング」を「日本語(ISO-2022-JP)」にすると、文字化けしないで表示されるようになりました。
Thunderbirdのプロパティ2

1年ほど前は、「フォールバックテキストエンコーディング」が「日本語(ISO-2022-JP)」になっていたので文字化けしないでメールを読めていたのが、いつの間にかアップデートのタイミングで「Unicode(UTF-8)」に変わってしまったようです。

プログラムを修正

とりあえず原因と対処方法はわかりましたが、メールソフトとしてThunderbirdを利用する人すべてに設定を変更してもらうのは難しいです。
システムの修正が必要です。

古いシステムでしたがソースコードがあり、Javaで書かれたプログラムです。
不慣れなEclipseの設定やコンパイル環境の構築を行って、数回試した結果、
メールヘッダのContent-Typeを
text/plain
から
text/plain; charset="ISO-2022-JP"
に置き換えられました。

「フォールバックテキストエンコーディング」が「Unicode(UTF-8)」のままでも、文字化けしないでメールを読めるようになりました。


メールソフトとしてThunderbirdを使っていて、以前のメールが文字化けする方は、「フォールバックテキストエンコーディング」が「Unicode(UTF-8)」になっていないか確認してみると、文字化けが解消するかもしれません。