こんばんわ、まつです。
OS:Windows2000
VB.Net 2003 Framework1.1
以下のプログラム作成し、実行しました。
成功のメッセージは出るのですが、
メールが送られません。
Private Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim userName As String = "hoge"
Dim password As String = "hogehoge"
Dim tcp As New Sockets.TcpClient
tcp.Connect("localhost", 25)
Dim sw As New StreamWriter(tcp.GetStream())
sw.WriteLine("USER " & userName & "\nPASS " & password & "\nQUIT\n")
sw.Flush()
tcp.Close()
Dim message As New System.Web.Mail.MailMessage
message.From = "11111@xxx.ne.jp"
message.To = "22222@yyy.com"
message.Subject = "プログラムから送信する電子メール"
message.Body = "テスト!"
Try
System.Web.Mail.SmtpMail.Send(message)
MessageBox.Show("メールを送信しました", _
"メール送信", _
MessageBoxButtons.OK, _
MessageBoxIcon.Information)
Catch ex As Exception
MessageBox.Show("メールの送信に失敗しました", _
"メール送信", _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
End Try
End Sub
間違いがあれば、教えて頂けないでしょうか?
よろしくお願いします。
.NET Framework 使ってないので推測ですが。
>Try
> System.Web.Mail.SmtpMail.Send(message)
> MessageBox.Show("メールを送信しました", _
これでは実際に使用する SMTP サーバが設定されてないように思います。
実際にメールの送信に使用する SMTP サーバ名を設定すればご希望の動作を
するようになるのでは?
ところでコード前半に tcp オブジェクトで localhost:25 に connect 〜 close している
部分がありますが、もしかして POP before SMTP を実装していますか?
それであれば、接続先ポート番号違うんじゃないかと。
Geo=TK3さん、ありがとうございます。
tcp.Connect("localhost", 25)を
tcp.Connect("SMTP サーバ名", 25)にし、
sw.Flush()をコメントアウトしたら、送信されました。
その前にIISのSMPT Serviceをオフにしたのですが、何か関係があるのでしょうか?
>tcp.Connect("localhost", 25)を
>tcp.Connect("SMTP サーバ名", 25)にし、
>sw.Flush()をコメントアウトしたら、送信されました。
あれ、なんか私の推測とは違う動作をしていますね (^^;; 。
sw.Flush() をコメントアウトしたら動作したのは、SMTP セッションに QUIT コマンドを送らなくなった為だと思うんですが。
# ちなみに SMTP には USER, PASS というコマンドはありません。
# SMTP-AUTH だとちょっと分からないですが。
うーん、System.Web.Mail.SmtpMail.Send メソッドって SmtpServer プロパティが設定されてない時には既に接続されている SMTP セッションを使うのかな?
msdn 読んでもいまいち動作が分からない...
>その前にIISのSMPT Serviceをオフにしたのですが、何か関係があるのでしょうか?
直接は関係ないと思います。
SMTP サーバとして"localhost"を使っていた時にはこのサービスが使われていたでしょうけれど、SMTP サーバ名に変更したという事なので。
ツイート | ![]() |