- PR -

VB.Net2003のSMTPメール送信方法について

1
投稿者投稿内容
MI
常連さん
会議室デビュー日: 2007/01/30
投稿数: 30
投稿日時: 2008-04-23 21:38
OS:Win2000 Pro
.Net Framework:1.1

お世話になります。
VB.Net2003 にてSMTPサーバを指定してメール送信を行いたいのですが、System.Web.Mail.MailMessageクラスのパスワードとIDを求められるBASIC認証以外で送信する方法が分からず困っております。

最初,下記のコードを実行しておりましたが、以下のエラーが発生して送信できませんでした。

ex.GetBaseException.ToStringにて取得
「System.Runtime.InteropServices.COMException (0x80040211): メッセージを SMTP サーバーに送信できませんでした。転送エラー コードは 0x80040217 です。サーバーからの応答は次のとおりです。not available」

>実行コード .Net 1.1ver----------------------------------
Dim mm As New System.Web.Mail.MailMessage

mm.From = "FROM <xxx@xxx.co.jp>"
mm.To = "xxx@xxx.co.jp"
mm.Subject = "SUBJECT"
mm.Body = "BODY"
mm.BodyEncoding = System.Text.Encoding.GetEncoding(50220)
System.Web.Mail.SmtpMail.SmtpServer = "ms.xxx.xxx.jp"
System.Web.Mail.SmtpMail.Send(mm) ’←*エラー発生
>------------------------------------------------------

そこで、送信前に下記のBASIC認証を加えると送信が可能になりました。
’BASIC認証
mm.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
mm.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxx"
mm.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxxxxxx"

ですが NTLM認証では上と同じエラーが出てしまいます。
’NTLM認証
mm.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 2
mm.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
mm.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "ms.xxx.xxx.jp"

しかし、このファイル自体がコンソールファイルで頻繁にメールを自動送信したい為、毎度のパスワード設定ができません。(パスワードの保存は避けたいです)

利用している環境では、NTLM認証自体が許されないのかと(すみませんSMTPに詳しくないのですが…).Net Framework2.0の System.Net.Mail.MailMessageクラスでパスワード無しに送信してみると、きちんと送信されました。

>実行コード .Net 2.0ver----------------------------------
Imports System.Net.Mail
Module Module1
Sub Main()
Dim objMail As New MailMessage
Dim objSMTP As New SmtpClient

objMail.From = New MailAddress("xxx@xxx.co.jp", "FROM")
objMail.ReplyTo = New MailAddress("xxx@xxx.co.jp", "REPLYTO")
objMail.To.Add(New MailAddress("xxx@xxx.co.jp", "TO"))
objMail.Subject = "SUBJECT"
objMail.Body = "BODY"
objSMTP.Host = "ms.xxx.xxx.jp"
objSMTP.Port = 25
objSMTP.Send(objMail)
objMail.Dispose()
End Sub
End Module
>----------------------------------

記載させて頂いた状況で
パスワードを設定せずに、送信できる方法にもしお心あたりがございましたら
どうかアドバイス頂けませんでしょうか。

環境について説明が足らない点等ございましたら、お手数ですがご指摘よろしくお願い致します。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-04-23 22:20
よくわからないけど
 SMTPサーバーのOSは何ですか?

(NTLM認証が無いor有効でない
  可能性があるので確認してはどうでしょうか?)
MI
常連さん
会議室デビュー日: 2007/01/30
投稿数: 30
投稿日時: 2008-04-24 14:10
indigo-x 様

ご回答ありがとうございます。

レンタルの為、今はっきりと確認ができないのですが、サーバのOSはLinux系のようです。
確認してみます。

ただ、同じ自分のマシンからテストして、.Net2.0ではNTLM認証ができて.Net1.1ではBasic認証しかできませんでしたので、元々サーバはNTLM認証可では無いか→.Net1.1のコードに何か足りない点があるのではないか、と質問させて頂きました。

アドバイスありがとうございます。

引用:

よくわからないけど
 SMTPサーバーのOSは何ですか?

(NTLM認証が無いor有効でない
  可能性があるので確認してはどうでしょうか?)



[ メッセージ編集済み 編集者: MI 編集日時 2008-04-24 14:21 ]
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-04-24 17:03
Linux系ではNTLM認証はないのでは。。(Samba?)

おそらく.NET2.0で正常に実行されるのはPOP before SMTPを
使用しているからでしょう。

(30分ぐらい時間をおいたらエラーになると思います)

で、ドメインの外なら、どちらにしろパスワードとIDは
やはり要りますね。
MI
常連さん
会議室デビュー日: 2007/01/30
投稿数: 30
投稿日時: 2008-04-24 23:32
ご回答ありがとうございます。
引用:

indigo-xさんの書き込み (2008-04-24 17:03) より:
Linux系ではNTLM認証はないのでは。。(Samba?)


パスワードを設定しない=NTLM認証かとおもっておりました。お恥ずかしいです。。。

以下、自分にとって情報の宝庫ですので、色々調べてからお返事させてください。
引用:

おそらく.NET2.0で正常に実行されるのはPOP before SMTPを
使用しているからでしょう。

(30分ぐらい時間をおいたらエラーになると思います)

で、ドメインの外なら、どちらにしろパスワードとIDは
やはり要りますね。



ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)