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