.NET Framework では、旧ver.1.x では System.Web.Mail 名前空間、ver.2.0 では System.Net.Mail 名前空間のクラスを利用することで、SMTP プロトコルによるe-mail の送信が簡単にできる。
しかし、日本語文字列を宛名や表題、本文に含む e-mail 送信を行う場合、System.Web.Mail 名前空間、System.Net.Mail 名前空間のクラスでは少々難がある。この問題は、
Windows Developerマガジン2006/04月号 特集1 や、中博俊氏の Web サイト「
System.Net.Mail問題」 に詳しい。
この問題の解決には、System.Web.Mail 名前空間、System.Net.Mail 名前空間のクラスに頼らず、独自実装するしかない。
幸い、上記の中博俊氏が、日本語メール送信に対応した独自実装を Wankuma.Net.Mail 名前空間のクラスライブラリとして公開されていらっしゃる。System.Net.Mail 名前空間のクラスとインターフェース互換である点も学習コストが低くて嬉しく、我々も利用させていただいている。
しかし実際に使っているうちに、相手のSMTPサーバーの種類によってはうまく送信できないケースがあることがわかってきた。具体的には、メールは確かに届くのだが、本文が空文になってしまう、という現象である。
いろいろ調べたところ、Wankuma.Net.Mail.SmtpClient クラスで SMTP サーバーに送信内容を送り込む際、メールヘッダと本文の間に空行が挿入されるべきなのだが、その空行が挿入されていないことがわかった。
Wankuma.Net.Mail 名前空間のクラスライブラリはソースも公開して頂いているので、我々はこの点を修正して対処している。
また、仕事の都合上、どうしても HTML 形式のメールを送る需要があったり、重要度を設定したメールを送る必要があったりする。この点も、ソースに手を加えて対応している。
具体的には、重要度の設定は、メールヘッダに、X-Priority ヘッダ(これはMS製メーラーのため)及びPriority ヘッダを付加するようにしているだけである。
HTML 形式のメールについては、本来ならば、マルチパートMIME形式で AlternateView も提供した形式としなければならないのだろう。しかし、そこまで拡張するのは骨が折れるのと、我々の需要では、送信先は限定されていて予め HTML 形式のメールが正しく受信できるか検証することになっている。そこで、HTML形式で送信する場合は、単に Content-type ヘッダに、text/plain ではなく text/html と指定して送信するようにしてある。