2008年10月15日水曜日

.NetFramework2.0のMailMessageクラスの仕様(IFAX編)

System.Net.MailのMailMessageクラスを利用したメール送信アプリケーション作成時に問題が発生した。
簡単に言えばこのクラスは日本規格対応されていない為発生した現象だ。

対象相手はNTTのiFAXだ。

通常このクラスはUTF-8を前提に作られており、Shift-jis対応を行おうとした際には各パートでエンコードを変更しなければならない。
エンコード自体はできるのだが、メールヘッダーの記述順序が存在し、それが原因でこのクラスの利用が見送られた。

  内容:
* 解説書上の以下の記述とSystem.Net.Mailクラスから生成される現象について記します。
*
* 解説書:メールヘッダーのbody部のContent-Type第一句に次の定義が必要
*   Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit
*
* System.Net.Mailで作成した場合の第一句:
* Content-Type: multipart/alternative
*
* これはSystem.Net.Mailクラスで作成されるメールヘッダーはjis・shift-jis規格に完全対応していない為発生する。(UTF-8対応)
* このクラスにあるMailMessageクラスのHeaderメソッドはメールヘッダーを独自に生成する機能では無く、HTMLとテキストを混在して生成できるクラス
* AlternateViewクラスを利用してshift-jisにエンコードしたbody部を作成する必要がある。
* ただ、このクラスを利用すると必ずContent-Type: multipart/alternativeがセットされる為、
* 今回の要求には全く合わない。
*
* これを回避する方法はSocketプログラム(TCP/IPプログラム)を別途手組みで作成する必要がある。

納期との噛み合いもあり無償のツールを利用する事で回避できたが、この問題は各国の仕様に振り回されている感が大きい。