Hatena::ブログ(Diary)

ザリガニが見ていた...。 このページをアンテナに追加 RSSフィード

2008-12-13

Leopard Mail.appの送信済みフォルダの文字化け対策の試行錯誤

OSX 10.5 Leopardをインストールしてから今日までずっと、返信した時に、送信済みメールボックスのメッセージが文字化けする現象に悩まされてきた。

  • 送信済みとして手元に残っているメッセージが文字化けしてしまうことがある。
  • 返信先の相手に届くメールは問題なく読める状態。
  • 新規作成して送信した場合は問題なく読める状態。
  • 文字化けしたメールはテキストエンコーディングを「自動」に指定すれば、問題なく読める状態になる。(ISO 2022-JPと判断されるようだ。)

これまで、送信先ではちゃんと読めるし、自分の手元でもテキストエンコーディングの手動設定でちゃんと読めるので放置してきた。その間、Leopardも10.5.5までアップデートが進んだ。なのに、一向に改善されない状態だ...。そろそろ、毎回テキストエンコーディングを変更するのが面倒臭くなってきた。

ショートカットの割り当て

  • 「メッセージ >> テキストエンコーディング >> 自動」にショートカットを割り当ててしまえば、面倒臭さは激減する。(自分の場合はcommand-option-1)

f:id:zariganitosh:20081213100334p:image

  • しかしである。このショートカット操作も1年以上続けていると疑問を感じ始めるのだ。
  • 「そもそも、何で自分が作成したメッセージを一発でちゃんと読めないんだ!」と...。

原因

調べてみると、以下のページを読んで文字化けが発生する原因を明快に理解することが出来た。(素晴らしいメモに感謝です!)

実際の自分の状況も確認してみた。(command-option-Uでメールのソースを確認しながら)

  • 文字化けが発生しているケースは、shiftJIS で送信されたメールに対する返信だった。
    • Content-Type: text/plain;charset=Shift_JIS
    • Content-Transfer-Encoding: 8bit
  • 上記メールに対する返信の「下書き」を確認すると、X-Apple-Encoding-Hint: 2561が付加されている。
    • 「下書き」の段階で、テキストエンコーディングには shiftJIS が設定されていた。
    • しかし、実際の内容は ISO 2022-JP。(この不一致が文字化けの原因)
  • 新規メールの下書きには、X-Apple-Encoding-Hint: は存在しない。
    • 「下書き」の段階で、テキストエンコーディングには 自動 が設定されていた。
    • 実際の内容は ISO 2022-JP。(自動のテキストエンコーディングは ISO 2022-JP と認識され、一致している模様)
  • 「送信済み」の状態になると、X-Apple-Encoding-Hint: は削除されるが、おそらく「下書き」段階のテキストエンコーディングが引き継がれている模様。
    • 試しに、「下書き」段階でテキストエンコーディングを 自動 に手動設定してから送信してみると、文字化けは発生しなくなった。

まさしく、上記メモで説明されているのと同じ状況だ。付加された X-Apple-Encoding-Hint: が悪さをしている。(ホント、文字化けのために付加しているみたいだ。)

対策

文字化けの原因は理解できた。その対策としてベストなのは、X-Apple-Encoding-Hint: を付加しない、あるいはテキストエンコーディングの判定に利用しない、または実際の内容もX-Apple-Encoding-Hint: と同じにすることだと思う。

      • ちなみに、OSX 10.4 Tigerの時は、X-Apple-Encoding-Hint:に関係なく、テキストエンコーディングは自動が設定されていた。

しかし、現状の自分の知識と能力では上記対策をすることは無理そう。そこで、以下の回避策を考えてみた。

送信済みのメーッセージに対するルールの自動適用は出来ない

最初に思い付いたのは、メールのルール設定で送信済みのメッセージのテキストエンコーディングをすべて自動に設定すること。しかし、驚愕の事実が判明した。Mail.appのルールはメッセージを受信した時だけ自動適用される。それ以外は手動で適用(メッセージ >> ルールの適用 command-option-L)するしかない、ようなのだ...。

ルールを手動で適用するのでは、テキストエンコーディングを手動で設定するのと同じで意味がない...。

フォルダアクションスクリプトで回避

そして、やはり最後に辿り着くのはいつものAppleスクリプト。OSX 10.4 Tigerから、メールは1メッセージ1ファイルになった。そこでフォルダアクションスクリプトを利用して、ファイルが追加されたら、そのファイルを開いて、テキストエンコーディングを設定するようにしてみた。

  • Mail.appはAppleScriptに対応しているのだが、詳細な使い方は今イチ分からないのでGUIスクリプトを利用した。
    • 特定のメッセージを指定して、テキストエンコーディングを設定する方法が知りたい...。
  • よって、このスクリプトを実行する時は、以下の条件が必要になる。
    • Mac OSX 10.5 Leopardで、言語環境が日本語。
    • ユニバーサルアクセスの「補助装置にアクセスできるようにする」がチェックありの状態。
    • 「メッセージ >> テキストエンコーディング >> 自動」にショートカットcommand-option-1を割り当て済み。
on adding folder items to this_folder after receiving added_items
    tell application "Finder" to open added_items
    
    tell application "System Events"
        if UI elements enabled then
            --操作対象のアプリを最前面に設定する
            tell process "Mail"
                set frontmost to true
            end tell
            
            keystroke "1" using {command down, option down} --自動
            keystroke "w" using {command down}
            pick (menu item "メッセージビューア" of menu "ウインドウ" of menu bar item "ウインドウ" of menu bar 1 of application process "Mail" of application "System Events")
            keystroke "w" using {command down}
            keystroke "n" using {command down, option down}
        else
            tell application "System Preferences"
                activate
                set current pane to pane "com.apple.preference.universalaccess"
                display dialog "GUIスクリプティングが利用可能になっていません。「補助装置にアクセスできるようにする」にチェックを入れてください。"
            end tell
        end if
    end tell
end adding folder items to
  • 上記スクリプトを/Library/Scripts/Folder Action Scriptsに保存(ファイル名:mail_encoding_auto.scpt)して、
  • アプリケーション >> AppleScript >> フォルダアクション設定.app でフォルダアクションを設定した。(MobileMe(.Mac)の場合)
    • アクションを設定するフォルダ:~/Library/Mail/Mac-XXXXXX/Sent Messages.imapmbox/Messages
    • アクションとして実行するスクリプト:mail_encoding_auto.scpt

f:id:zariganitosh:20081213100522p:image

以上で、MobileMe(.Mac)メールを送信すると、「送信済みメッセージを開いて、テキストエンコーディングを自動に設定して閉じる」という操作が実行されるようになった。実際のウィンドウ操作が目に見えるところが見苦しいが、ひとまず自分の環境では送信済みフォルダのメッセージを最初からちゃんと読めるようになった。

送信済みフォルダを利用しない

結局、現状の自分に出来る対策は以下の三つのレベルだけ。

  1. 文字化けしていたらテキストエンコーディングを毎回手動設定する。
  2. 上記スクリプトでテキストエンコーディングの設定を自動実行する。
  3. メール環境設定 >> 作成 >>「自動的に自分をBcc:に含める」をチェックありにして、送信済みフォルダを利用しなくてもよい設定にしてしまう。

3つ目は利用しないだけで、対策とは言えないかもしれないけど、結局、受信フォルダにすべてのメールが集まるので、メールやり取りの流れも見えて一番良いのかもしれない。(以前は似たような設定にしていた。そもそも、スマートフォルダで送受信のメッセージをまとめてみられるようになったので、自分宛のBccを止めたのだった。自分が書いた内容に絞って確認する時は便利かと思ったので。)

今からまた3. Bcc方式に戻そうかとも思ったが、ひとまず2. AppleScript方式で暫く使ってみることにした。早くAppleがちゃんと対策してくれることに期待したい。

たあぼおたあぼお 2009/11/01 13:11 初めまして。
私もMail.app で iphone メールが文字化けするので検索してたどり着きました。

すご。びっくりしました。スクリプトまで作ってしまうとは。
ちょっとしきいが高いですよね。

参考になりました

zariganitoshzariganitosh 2009/11/02 10:21 たあぼおさん、はじめまして。
Appleには、こんなことしなくても文字化けしないようにして欲しいですね。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/zariganitosh/20081213/1229131337