C++Builder 2010のIndy10を修正してメールを送信する

以前の記事「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ユーザーの方に、検証していただけると喜びます。

導入手順は次のようになります。

  1. http://indy.fulgan.com/ZIP/から「「IndyTiburon.zip」をダウンロードします。

  2. ダウンロードしたファイルを展開します。

  3. 次のファイルをダウンロードして、展開したファイルの「Lib\Protocols\」にコピーします。

    • IdTextEncoding_ISO2022JP.pas
      TMBCSEncodingを継承した、ISO-2022-JP用のエンコーディングを扱うクラスです。
      mlang.dllの関数を使用しているため、InternetExplorer5.5以上が必要です。
      MECSUtilsを参考にさせていただきました。
  4. 次のファイルをダウンロードして、「Lib\Protocols\」にあるファイルと差し替えます。
    • IdGlobalProtocols.pas
      3917行目のif文を追加しました。
      ISO-2022-JPのときは、IdTextEncoding_ISO2022JPを返すようにしました。

    • IdHeaderCoder2022JP.pas
      155行目から変更しました。
      文字コードの変換にIdTextEncoding_ISO2022JPを使用するようにしました。
      こちらのファイルの変更は本当に必要であるか自信がありません。

後はEmbarcadero Developer NetworkのC++Builder 2010 に最新のIndy10を統合するの記事を参考にして、Indy10をインストールしてください。

気になるところ

  1. ちゃんと動作するか。問題ないとは思いますが、まだ簡単な送信テストしか行っていません。
  2. オリジナルと違い、文字コードの変換にmlang.dllの関数を使用しているため、InternetExplorer5.5以上が必要です。
    この制限は許容できるでしょうか。
  3. 実行効率を考えると、チューニングが必要だと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください