SmtpClient クラスで SMTP-AUTH は出来ない?
SmtpClient クラスの Credentials で認証が出来そうですが、問題が起きる場合があります。
通信内容
.NET Framework 2.0で、System.Net.NetworkCredential を System.Net.Mail.SmtpClient の Credentials に設定し、パケットキャプチャしてみました。
ソースは、SMTP認証でメールを送信する - .NET Tips (VB.NET,C#...) の「.NET Framework 2.0以降で、SmtpClientクラスを使用する方法」を参考にしました。
設定
パラメータ | 設定値 |
---|---|
SmtpClient.Host | MailSrv |
SmtpClient.EnableSsl | false |
Credentials.UserName | hogeuser |
Credentials.Password | hogepass |
キャプチャ内容
S: 220 MailSrv ESMTP unknown C: EHLO AppSrv S: 250-ENHANCEDSTATUSCODES | 250-PIPELINING | 250-8BITMIME | 250-AUTH LOGIN | 250-AUTH=LOGIN | 250-HELP | 250 OK C: AUTH login aG9nZXVzZXI= ※aG9nZXVzZXI= → hogeuser S: 334 VXNlcm5hbWU6 ※VXNlcm5hbWU6 → Username: C: aG9nZXBhc3M= ※aG9nZXBhc3M= → hogepass S: 334 UGFzc3dvcmQ6 ※UGFzc3dvcmQ6 → Password: C: MAIL FROM:<hogeuser@appsrv.test> S: 535 5.7.0 authentication(LOGIN) failed.
メールサーバから、"334 Username:"と送られても、Credentials.Password を送ったり、"334 Password:"と送られても、FROM文を送ったり。
SMTP-AUTH login と相性が悪い場合があるようです。
「NetworkCredential クラス」って
msdnを参照すると、「NetworkCredential クラス」は、以下の様に説明されています。
基本認証、ダイジェスト認証、NTLM 認証、Kerberos 認証などのパスワードに基づく認証方式に資格情報を提供します。
NetworkCredential Class (System.Net) | Microsoft Docs
メールサーバが、IIS-SMTPなどであれば、認証として機能するのでしょうが、他のメールサーバでは注意したほうが良さそうです。