SmtpClient

.NET Framework 2.0からはSystem.Net.Mail.SmtpClientがあるので、自作のライブラリはいらないかと思いきや。
SmtpClientの処理は、日本語周りで微妙なところがあったりするようで。
とりあえず、Membership APIのCreateUserWizardコントロールやPasswordRecoveryコントロールが内部で使ってる分に関しては、MailDefinitionの内容をごまかしていたりします。


あと、SmtpClientを使ってみて気がついたんですが、自分の会社のメールサーバ(っというかウイルス対策ゲートウエイ)に対しては送信がエラーになってしまいました。
http://www.mcafee.com/japan/products/mcafee/ws_smtp.asp


パケットを覗いたりしながら調査をしてみたところ、以下のことが分かったのでメモしておきます。

  • SmtpClientはSMTP鯖に対して最初にEHLOを試みる
  • これに対してWebShieldは502(Command not Support)を返す
  • SmtpClientは応答が500(Command not Recognized)以外のエラーに対してはExceptionを投げる(#゚Д゚)

っというわけで、WebShield相手にSmtpClientが使用できないことがわかりました。
しょうがないので、ローカルでSNMP Serviceを稼働させて、そこから会社のサーバに対して転送するようにしています。


自作のSMTP実装とPOP3実装も持っているんですが、まだ捨てられないようです(´ω`)
.NET FrameworkPOP3の実装がないのはいいとして、SMTPに関しても上記の様な問題があったりするので。


ただ、自作のライブラリも色々と手抜き実装な所があったりします(’A`)
元々が携帯相手の送信やSMTP/POP3ベースのミドルウエア相手用に作ったライブラリなので、MIME/Multipartの実装をサボって添付ファイルが扱えなかったりとか。
後は、エラー処理がイマイチな所(ライブラリ内で例外を握りつぶしていたり)があるので、そのうち改装したいな〜なんて思っていたりもします(´-`)