POP Before SMTP を使うサーバーにメッセージをスクリプトで送信する


スクリプトでメッセージを送信する場合、Outlook を使うとメッセージの送信を許可するかどうかのダイアログが表示されてしまいます。
これはウィルスなどによってメッセージが送信されることを防ぐ目的で行われていますが、Outlook 2003 以前で Exchange サーバーを使っていない環境ではこのダイアログを表示させないようにすることができません。
サーバーが SMTP サーバーであるなら、Outlook をつかわずに CDO for Windows 2000 (以下、CDOSYS) によって直接メールを送信する方法があるのですが、サーバーが POP before SMTP 認証を行っている場合、CDOSYS ではこの認証ができないため、直前に POP でアクセスしておかなければ送信エラーとなってしまいます。

そこで、Outlook で POP 認証を行った後、CDOSYS でメール送信をするという方法を紹介します。
Outlook で明示的に POP 認証を行う方法はありませんが、SyncObject の Start メソッドによりメッセージの送受信動作を開始することで POP 認証が行われます。Start メソッド自体は送受信動作を開始すると直ちに制御を戻してしまい、POP 認証が終わったかどうかを呼び出し側のスクリプトで確認することはできません。そのため、Start メソッドを実行後、しばらく待ってから CDOSYS により送信を行うようにします。
以下は、サンプルのコードです。送受信者のアドレスや SMTP サーバーの名前などを適宜変更してご使用ください。

' ここをトリプルクリックでスクリプトを選択できます。
Dim appOutlook
Dim objSession
Dim objSync
Dim objMsg
Dim objConf
' Outlook を起動し、ログオンします。
Set appOutlook = CreateObject("Outlook.Application")
Set objSession = appOutlook.GetNamespace("MAPI")
objSession.Logon
' 送受信を実行するため SyncObject を取得します。
Set objSync = objSession.SyncObjects.Item(1)
' 送受信を実行します。
objSync.Start
' 1 分程度送受信処理を待ちます。
WScript.Sleep(60000)
' CDOSYS の Message オブジェクトを生成します。
Set objMsg = CreateObject("CDO.Message")
Set objConf = CreateObject("CDO.Configuration")
' 受信者のアドレスを指定します。
objMsg.To = "rcpt@example.com"
' 送信者のアドレスを指定します。
objMsg.From = "sender@example.com"
' メッセージの件名を指定します。
objMsg.Subject = "Sending test"
' メッセージの本文を指定します。
objMsg.TextBody = "Test message"
' 送信に使用するサーバー名を指定します。
objConf.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtpserver"
' 送信方法を指定します。
objConf.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2
' 設定を更新します。
objConf.Fields.Update
' 送信設定をメッセージに格納します。
Set objMsg.Configuration = objConf
' メッセージを送信します。
objMsg.Send

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中