以前の記事「C++Builder 2010のIndyでメール送信について」で書いたように、Windows 2000にはWideCharToMultiByte関数に不具合があるため、ISO-2022-JPのメールが文字化けします。
前回の記事にも書いたように、Embarcadero Developer NetworkにC++Builder 2010 に最新のIndy10を統合する方法が紹介されました。
この記事のおかげで、Indy10を修正するという方法に現実味が出てきました。
そこでWindows2000でISO-2022-JPのメールを送ることができるように、Indy10を修正しました。
たたき台として、修正したファイルを公開します。
私はC++Builder使いなので、Delphiでコードを書くことはほとんどありません。
ですから、Delphiユーザーの方に、検証していただけると喜びます。
導入手順は次のようになります。
- http://indy.fulgan.com/ZIP/から「「IndyTiburon.zip」をダウンロードします。
-
ダウンロードしたファイルを展開します。
-
次のファイルをダウンロードして、展開したファイルの「Lib\Protocols\」にコピーします。
- IdTextEncoding_ISO2022JP.pas
TMBCSEncodingを継承した、ISO-2022-JP用のエンコーディングを扱うクラスです。
mlang.dllの関数を使用しているため、InternetExplorer5.5以上が必要です。
MECSUtilsを参考にさせていただきました。
- IdTextEncoding_ISO2022JP.pas
- 次のファイルをダウンロードして、「Lib\Protocols\」にあるファイルと差し替えます。
- IdGlobalProtocols.pas
3917行目のif文を追加しました。
ISO-2022-JPのときは、IdTextEncoding_ISO2022JPを返すようにしました。 -
IdHeaderCoder2022JP.pas
155行目から変更しました。
文字コードの変換にIdTextEncoding_ISO2022JPを使用するようにしました。
こちらのファイルの変更は本当に必要であるか自信がありません。
- IdGlobalProtocols.pas
後はEmbarcadero Developer NetworkのC++Builder 2010 に最新のIndy10を統合するの記事を参考にして、Indy10をインストールしてください。
気になるところ
- ちゃんと動作するか。問題ないとは思いますが、まだ簡単な送信テストしか行っていません。
- オリジナルと違い、文字コードの変換にmlang.dllの関数を使用しているため、InternetExplorer5.5以上が必要です。
この制限は許容できるでしょうか。 - 実行効率を考えると、チューニングが必要だと思います。