Windows 7環境におけるSMTPメールアプリケーションの開発について

タグの編集
投稿者 パールマン  (社会人) 投稿日時 2011/2/3 08:57:20
Visualbasic 2010によるソフトウェア開発の環境がWindows 7になり、困ったことが発生しました。

簡単なメールを送信する、ただそれだけの機能のアプリケーションを作っていたのですが、Windows 7に付属( と言ったらいいのかな )しているIIS 7にはSMTPが無い?という問題にぶつかりました。

Visualbasic 2010のSampleにメールを送信するサンプルプログラムがあるのですが、「IISを使えるようにして・・・」と注意書きがあるものの一番肝心なSMTPが無い?ために実行を試してもメールは送信できないというエラーが発生するばかりでした。

Microsoft TechNetにある「SMTP 電子メールを構成する」を参照したところ、
------------------ 引用 ----------------------
既定では、SMTP サーバーはインストールされません。
 SMTP は、Windows Server® 2008 のサーバー マネージャー ツールの
 [機能の概要] を使用して追加できます。
---------------------------------------------
と「メモ」にありました。

http://technet.microsoft.com/ja-jp/library/cc772058%28WS.10%29.aspx

つまりこれは「Windows Server® 2008 のサーバー マネージャー ツール」を利用しろということでしょうか。
この「Windows Server® 2008 のサーバー マネージャー ツール」は、どこからかダウンロードして
使用できるものなのでしょうか。
まさかWindows Server 2008を買えということではないですよね。(汗;)

投稿者 shu  (社会人) 投稿日時 2011/2/3 13:04:20
System.Net.Mail.SmtpClient
ですか?
hostを指定すれば自分のとこにsmtpがなくても送れますよ。
投稿者 パールマン  (社会人) 投稿日時 2011/2/3 18:11:14
お世話になっております。

仰るとおり、System.Net.Mail.SmtpClient なのですけど・・・・
当初試したプログラムコードは、どぼんさんのサイトで紹介されているもので、コードは次の様に
なります。
'送信者 
Dim senderMail As String = "sender@xxx.xxx"
'宛先 
Dim recipientMail As String = "recipient@xxx.xxx"
'件名 
Dim subject As String = "こんにちは"
'本文 
Dim body As String = "こんにちは。" + vbCrLf + vbCrLf + "それではまた。"

Dim sc As New System.Net.Mail.SmtpClient()
'SMTPサーバーを指定する 
sc.Host = "localhost"
'メールを送信する 
sc.Send(senderMail, recipientMail, subject, body)


上記のコードは、どぼんさんのサイトで紹介されているコードそのものですが、
試したコードでは、送受信のアドレスとsc.hostの内容を私の指定するものに替えております。

shuさんが仰る‘host’は、上記コードのsc.hostの内容と解釈しているのですが、このあたりで
何か間違っているのでしょうか。

そして、これを実行すると次のエラーメッセージが表示されます。
-------------------------------------------------------------------
× アプリケーションのコンポーネントで、ハンドルされていない例外が発生しまし
  た。[続行]をクリックすると、アプリケーションはこのエラーを無視し、続行しよう
  とします。[終了]をクリックすると、アプリケーションは直ちに終了します。

  メールを送信できませんでした。
[ ▼ 詳細 ]                     [  続行  ] [  終了  ]
-------------------------------------------------------------------

1つ気になっているのは、SMTPサーバがOP25Bを実施しているためかなと考えているのですが、
これだとしますと、対応方法がわからないという状態です。
投稿者 shu  (社会人) 投稿日時 2011/2/3 21:25:30
そうするとポート指定とかsmtp認証とか必要になりそうな感じですかね。
portとかCredentials 辺りの設定をしてみてはどうでしょう?

投稿者 パールマン  (社会人) 投稿日時 2011/2/5 09:10:01
shuさん、ありがとうございました。
ご教示のとおり、port(ポート), Credentials(認証情報)の設定が必要でした。
さらにメール送信プログラムコードの完成には、EnableSsl(通信の暗号化指定)が必要であることがわかりました。

プログラムコードは次の様になりました
Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click

        ' 送信者 
        Dim senderMail As String = "sender"

        ' 宛先 
        Dim recipientMail As String = "recipient"

        '件名 
        Dim subject As String = "こんにちは"

        '本文 
        Dim body As String = "こんにちは。" + vbCrLf + vbCrLf + "それではまた。"

        Dim sc As New System.Net.Mail.SmtpClient()

        'SMTPサーバーを指定する 
        sc.Host = "host"

        ' ポートを指定する 
        sc.Port = "587" ' OP25Bが実施されている場合 

        '認証情報を指定する ' 必要な場合は指定する 
        sc.Credentials = New System.Net.NetworkCredential("userID""pass")

        'SSLの指定 
        sc.EnableSsl = False

        'メールを送信する 
        sc.Send(senderMail, recipientMail, subject, body)

    End Sub


※ sender, recipient, host ,userID, pass は、読み替えてください。