今週は結構アプリを使ってくれる人が増えたみたいで、
いくつか気づかなかった報告をいただきました。
ご意見頂きました皆様ありがとうございました。

まず致命的な欠陥について

このアプリはドコモSPモードに届いたメールをGmailに転送する利用が主である。
そのため利用者は日本語を扱うユーザのはずである。
にも関わらず日本語のメールが転送した段階で文字化けてしまう事象が多発していた。
ここ最近一気に利用者が急増したのにユーザに不便をかけてしまいました。m(__)m

対処が遅れてしまっていたのは、全てのメールが文字化けするのではなく、
一部のメールでしかバケないため、原因特定に手間取ってしまった。
再発防止のために原因についてメモしておく。

SPモードメーラ上では文字化けず、Gmail上でのみ文字化けする原因は以下にあった。
eml形式ファイルのヘッダに拡張ヘッダが含まれている場合に必ず、
�����}」的な化け方をすると分かった。

Return-Path: <hogehoge@docomo.ne.jp>
Subject: Re:Re:
X-Mail-Type: deco ← このままGmailへPutするとエラーにならず化けるのだ
X-DCMMail: spmode
 ← このままGmailへPutするとエラーにならず化けるのだ
Date: Sat, 27 Apr 2013 15:56:27 +0900
......

バージョン1.1.0以降emlのJavaMailのMessageオブジェクトの作り方を効率化したことが仇になり、拡張ヘッダそのままにGmailへIMAP転送していたことがまずかった。

またJavaMailの使い方が悪いのかもしれないが、本文がShift_JISのままだと同様の文字化けが発生する。
このため今はUTF-8にパースしてオリジナルを一部加工するはめになっているのだが、
この点はイマイチ納得がいかない。

chasetと本文の文字コードは間違いなく一致しており、文字コード変換も問題ないにもかかわらず、化けるのはどういうことなのだろうか?

一括転送機能を追加した

もともと一件づつ転送するのは、理由が2つあった。
①ドコモが用意したemlファイル単位でループで処理していた。VMGファイルも同様に1メール1ファイルだった
②既に同じメールがGmail上に存在しないかどうかをチェックするために、最終的には1件づつにならざるを得なかった。

⇒しかしこの一件づつ転送は遅いだけではなく、Gmail仕様上セッションはりっぱなしで
ループさせるとGmailからToo many simultaneous connectionsエラーが発生する。
一般的には15クライアント目安で発生するようなので、
一定間隔でコネクションの再接続を行うことで、大量メールを転送できるように改修した。

存在チェックをせず、1回のセッションの中で複数のメールをまとめてPutするよう
に変更したことで当たり前だが、圧倒的に早く転送できるようになった。


0 コメント:

コメントを投稿