Thunderbirdでメールを読んでいる。
最近はほとんどの大丈夫になったので油断していたのだが、今回ちょっとはまった。
わかってしまえば対応は昔から同じことをすれば良いのだが、いろいろあって、原因をかんちがいしてしまい、壮大な道草をしてしまった。
同じメールなのに、ThunderbirdがPOPでプロバイダから取得したメールは
文字化けせずに表示されるのだが、サーバ経由でIMAPで読んだメールは
文字化けして表示されるのだ。
□問題
【プロバイダ】→POP※1→【自宅サーバ】→IMAP※3→【手元のパソコン】※4⇒本文が文字化け(タイトルはOK)
【プロバイダ】→POP※2→【手元のパソコン】※4⇒読める
「メニュー」→「表示」→「文字エンコーディング」から変更してもすべて文字化けする。※5
※1:Fetchmailを使用してダウンロード
※2:Thunderbirdから直接ダウンロード
※3:dovecot2 (dovecot1でも同様)
※4:Thunderbirdで読む
※5:しばらくして(TBの再起動?)から、同様に文字エンコードの変更をすると、文字化けせずに表示できる文字コードがあった。
□共通点(二人からのメールが文字化け)
・X-Mailer: iPod Mail (10A523)、X-Mailer: iPhone Mail (10B146)
・Content-Transfer-Encoding: base64※5
・文字コードがメールタイトルはISO-2022-JP、本文もISO-2022-JPだとされている。※6
Content-Type: text/plain; charset="iso-2022-jp"
・文字コードを「Shift_JIS」にすると表示される。
※6:同じ人からのメールでも、文字コードがUTF-8、Content-Transfer-Encoding: 7bitとなっているメールは文字化けしない。googleで「iphone、メール、文字化け」で検索すると、UTF-8が原因だとするものが殆どだが、今回は違う。
□原因
答えは単純。メール本文の文字コードが「iso-2022-jp」と宣言されていたにもかかわらず、
本文(base64でエンコード)の文字コードが、「Shift_JIS」だったため。
□解決法
(1)メニューで表示できる文字コードを選択する。
(2)一旦、メールを保存し、「Content-Type: text/plain; charset="iso-2022-jp"」のcharasetを適切なもの(Shift_JIS, EUC-JP, ISO-2022-JP, UTF-8 など)に変更し、Thunderbirdに戻す。マウスで操作できる。
(3)送信する人に言ってみる。たぶん無理。
(4)appleに言ってみる。ほぼ無理。
□はまった理由
わかってしまえば単純なのだが、今回この解決のために数日を無駄に費やした。
(1)同じメールなのにThunderbirdがPOPでダウンロードしたメールは大丈夫なのに、IMAPだと文字化けする。
(2)文字化けしたメールの文字エンコードを変更したのに、すべてダメ(※5)
(3)IMAPのメールはヘッダの改行、空白が省略されている。※7
※7:imap経由だとヘッダにある整形のための改行や空白が無視されて表示される。
たとえば、ヘッダ部分をソースの表示でみてみると次の違いがある。(連続する半角空白は表示されないので全角空白に編集してます)
・ThunderbirdがPOPでダウンロードしたメール
Received: from xxxx.xxxxx.xxxx.or.jp ([172.xxx.xxx.xxx])
by xxxx.xxxx.or.jp with ESMTP
id <20130302xxxxxx.xxxx.xxxx.xxxx.or.jp@xxxx.xxxx.xxxx.or.jp>
for <xxxx@xxxx.xxxx.or.jp>;
Sat, 2 Mar 2013 18:02:12 +0900
・IMAPを利用したメール
Received: from xxxx.xxxxx.xxxx.or.jp ([172.xxx.xxx.xxx]) by xxxx.xxxx.or.jp with ESMTP id <20130302xxxxxx.xxxx.xxxx.xxxx.or.jp@xxxx.xxxx.xxxx.or.jp> for <xxxx@xxxx.xxxx.or.jp>; Sat, 2 Mar 2013 18:02:12 +0900
□原因の探索
・文字コードの問題を変更してみたものの、すべてで文字化けしたことが、つまづいた原因。
Thunderbirdのバグか?再起動した後だと、文字コードの変更が機能する。
・ヘッダの表示が異なることから、FetchmailによるPOPの問題、IMAPサーバの問題、Thunderbirdの問題を検討。
・Fetchmailの検査
設定の再確認。ダウンロードしたファイルの確認。問題なし。
・IMAPサーバの検査
タイミングが悪いことに、IMAPサーバ(dovecot)のバージョンアップをしたばかりで、IMAPサーバの検討をかなり行う。
設定の再検討、設定ファイルの読み込み、バージョンダウンなどを行うが問題なし。
サーバに保存されているメールファイルの閲覧、バイナリの確認を行うが、ヘッダの違いはなし。
IMAPサーバにtelnetでつなぎ、メールを表示させるも、やはりヘッダの改行が無視される現象はでない。
man文書のエスケープシーケンスが壊れて、まともに読めないことでも時間を浪費した(未解決)。
・Thunderbirdの検査
IMAPからThunderbirdに送られているデータに問題はないことがわかったので、ヘッダの改行や連続する空白が省略されるのはThunderbirdの仕様だと思ってあきらめる。
だとすると、ヘッダの改行がされないことが文字化けの原因とは考えにくい。
また、POP経由のメールは文字化けしないので、ファイルの中身自体は問題なく日本語のはずなので、もう一度文字コードの変更をしてみると、Shift_JISで本文が表示ができた。
□未解決事項
ThunderbirdがIMAPとPOPで表示が異なる。
・ヘッダの表示
・文字コードの間違いの対応
・ダウンロード直後のメールの文字コード変更の反映
バグかなー。こういうのってどこに報告すれば良いのだろう。
□Thunderbirdアプリケーション基本情報
名前: Thunderbird
バージョン: 17.0.3
ユーザエージェント: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130215 Thunderbird/17.0.3
アプリケーションのビルド ID: 20130215132702
最近はほとんどの大丈夫になったので油断していたのだが、今回ちょっとはまった。
わかってしまえば対応は昔から同じことをすれば良いのだが、いろいろあって、原因をかんちがいしてしまい、壮大な道草をしてしまった。
同じメールなのに、ThunderbirdがPOPでプロバイダから取得したメールは
文字化けせずに表示されるのだが、サーバ経由でIMAPで読んだメールは
文字化けして表示されるのだ。
□問題
【プロバイダ】→POP※1→【自宅サーバ】→IMAP※3→【手元のパソコン】※4⇒本文が文字化け(タイトルはOK)
【プロバイダ】→POP※2→【手元のパソコン】※4⇒読める
「メニュー」→「表示」→「文字エンコーディング」から変更してもすべて文字化けする。※5
※1:Fetchmailを使用してダウンロード
※2:Thunderbirdから直接ダウンロード
※3:dovecot2 (dovecot1でも同様)
※4:Thunderbirdで読む
※5:しばらくして(TBの再起動?)から、同様に文字エンコードの変更をすると、文字化けせずに表示できる文字コードがあった。
□共通点(二人からのメールが文字化け)
・X-Mailer: iPod Mail (10A523)、X-Mailer: iPhone Mail (10B146)
・Content-Transfer-Encoding: base64※5
・文字コードがメールタイトルはISO-2022-JP、本文もISO-2022-JPだとされている。※6
Content-Type: text/plain; charset="iso-2022-jp"
・文字コードを「Shift_JIS」にすると表示される。
※6:同じ人からのメールでも、文字コードがUTF-8、Content-Transfer-Encoding: 7bitとなっているメールは文字化けしない。googleで「iphone、メール、文字化け」で検索すると、UTF-8が原因だとするものが殆どだが、今回は違う。
□原因
答えは単純。メール本文の文字コードが「iso-2022-jp」と宣言されていたにもかかわらず、
本文(base64でエンコード)の文字コードが、「Shift_JIS」だったため。
□解決法
(1)メニューで表示できる文字コードを選択する。
(2)一旦、メールを保存し、「Content-Type: text/plain; charset="iso-2022-jp"」のcharasetを適切なもの(Shift_JIS, EUC-JP, ISO-2022-JP, UTF-8 など)に変更し、Thunderbirdに戻す。マウスで操作できる。
(3)送信する人に言ってみる。たぶん無理。
(4)appleに言ってみる。ほぼ無理。
□はまった理由
わかってしまえば単純なのだが、今回この解決のために数日を無駄に費やした。
(1)同じメールなのにThunderbirdがPOPでダウンロードしたメールは大丈夫なのに、IMAPだと文字化けする。
(2)文字化けしたメールの文字エンコードを変更したのに、すべてダメ(※5)
(3)IMAPのメールはヘッダの改行、空白が省略されている。※7
※7:imap経由だとヘッダにある整形のための改行や空白が無視されて表示される。
たとえば、ヘッダ部分をソースの表示でみてみると次の違いがある。(連続する半角空白は表示されないので全角空白に編集してます)
・ThunderbirdがPOPでダウンロードしたメール
Received: from xxxx.xxxxx.xxxx.or.jp ([172.xxx.xxx.xxx])
by xxxx.xxxx.or.jp with ESMTP
id <20130302xxxxxx.xxxx.xxxx.xxxx.or.jp@xxxx.xxxx.xxxx.or.jp>
for <xxxx@xxxx.xxxx.or.jp>;
Sat, 2 Mar 2013 18:02:12 +0900
・IMAPを利用したメール
Received: from xxxx.xxxxx.xxxx.or.jp ([172.xxx.xxx.xxx]) by xxxx.xxxx.or.jp with ESMTP id <20130302xxxxxx.xxxx.xxxx.xxxx.or.jp@xxxx.xxxx.xxxx.or.jp> for <xxxx@xxxx.xxxx.or.jp>; Sat, 2 Mar 2013 18:02:12 +0900
□原因の探索
・文字コードの問題を変更してみたものの、すべてで文字化けしたことが、つまづいた原因。
Thunderbirdのバグか?再起動した後だと、文字コードの変更が機能する。
・ヘッダの表示が異なることから、FetchmailによるPOPの問題、IMAPサーバの問題、Thunderbirdの問題を検討。
・Fetchmailの検査
設定の再確認。ダウンロードしたファイルの確認。問題なし。
・IMAPサーバの検査
タイミングが悪いことに、IMAPサーバ(dovecot)のバージョンアップをしたばかりで、IMAPサーバの検討をかなり行う。
設定の再検討、設定ファイルの読み込み、バージョンダウンなどを行うが問題なし。
サーバに保存されているメールファイルの閲覧、バイナリの確認を行うが、ヘッダの違いはなし。
IMAPサーバにtelnetでつなぎ、メールを表示させるも、やはりヘッダの改行が無視される現象はでない。
man文書のエスケープシーケンスが壊れて、まともに読めないことでも時間を浪費した(未解決)。
・Thunderbirdの検査
IMAPからThunderbirdに送られているデータに問題はないことがわかったので、ヘッダの改行や連続する空白が省略されるのはThunderbirdの仕様だと思ってあきらめる。
だとすると、ヘッダの改行がされないことが文字化けの原因とは考えにくい。
また、POP経由のメールは文字化けしないので、ファイルの中身自体は問題なく日本語のはずなので、もう一度文字コードの変更をしてみると、Shift_JISで本文が表示ができた。
□未解決事項
ThunderbirdがIMAPとPOPで表示が異なる。
・ヘッダの表示
・文字コードの間違いの対応
・ダウンロード直後のメールの文字コード変更の反映
バグかなー。こういうのってどこに報告すれば良いのだろう。
□Thunderbirdアプリケーション基本情報
名前: Thunderbird
バージョン: 17.0.3
ユーザエージェント: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130215 Thunderbird/17.0.3
アプリケーションのビルド ID: 20130215132702