コマンドラインアプリケーションの作成
これから作成するサンプルアプリケーションは、WebサーバにHTTPリクエストを送ります。その後、サーバからHTMLを受け取り、それをメールの本文として使用します。コードは実にシンプルで、状況に応じて変更可能です。行っている処理は、実際のコーディングがどうなっているかに関わらずまったく同じです。
Visual Basic 2008 Express Editionをインストールして使えるようにしたら、これを起動して[File]メニューから[New Project]を選択してください。[New Project]ダイアログボックスが表示されます。

[Console Application]を選択して、アプリケーションに適当な名前を付けます。本稿では、サンプルアプリケーションの名前を「Http2Email」とします。[OK]をクリックすると、次のようなワークスペースが表示されます。

私は、オブジェクトに分かりやすい名前を付けるのが好きなので、最初に[Solution Explorer]ペインでファイル名をModule1.vbからHttp2Email.vbへ変更します。これでプロジェクト内の該当するすべての箇所で名前が更新されます。その後、[File]メニューから[Save All..]を選んでディスクにプロジェクトを保存します。

次に設定をいくつか変更します。[Solution Explorer]の[My Project]アイテムをダブルクリックすると、このような設定画面が表示されます。

私の環境ではまだ.NET 2.0を使用しているWebサーバが複数あるので、まずターゲットフレームワークのバージョンを設定します。[Compile]タブで[Advanced Compile Options...]ボタンをクリックしてください。表示されたダイアログボックスの一番下に[Target framework]というオプションがあります。これを[.NET Framework 2.0]に変更してください。
[References]タブでは、参照やインポートされた名前空間をまとめて削除できます。[System]以外のすべての参照を削除してください(別のアプリケーションをビルドしていて、他の参照が必要な場合はこの限りではありません)。
また、Microsoft.Visual Basic、System、System.Collections、およびSystem.Collections.Genericを除くすべての[Imported Namespaces]を削除してください。

次に、アプリケーション設定をいくつか定義します。この情報をハードコーディングする代わりに設定として定義しておくと、再度コンパイルしなくてもアプリケーションのパラメータ(ひいてはアプリケーションの動作)を変更できます。[Settings]タブで、次の8つのアプリケーションスコープの設定を定義します。
| 設定 | 説明 |
| Url | メール本文として使用するHTMLの取得元となるURL |
| EmailFrom | メールアドレス(From) |
| EmailTo | メールアドレス(To) |
| EmailCC | メールアドレス(CC) |
| EmailBCC | メールアドレス(BCC) |
| EmailSubject | メールの件名 |
| EmailHtml | ブール型。メールがHTML形式であるべきかどうかを示す |
| SmtpServer | メールの送信に使用するSMTPサーバ名 |

これらは実に単純明快です。上記の画面イメージには、私がテストに使用した値が表示されていますが、URL、メールアドレス、およびSMTPサーバには、当然、各自の設定を使用してください。
EmailSubjectだけは、少々変わった設定になっています。[Value]列を見ると、プレースホルダとして<date>を使用しているのが分かると思います。この部分は、アプリケーションのコードによって現在の日付に置き換えられます。今回このようにしたのは、設定機能の使い方を紹介するため、またこの機能を使った場合でも動的に変化する値を指定できることを示すためです。
これでアプリケーションの設定はすべて完了したので、次は実際にコードを記述します。下記のコード例からコピー&ペーストするのが、おそらく一番簡単な方法でしょう。
Imports System.IO Imports System.Net Module Http2Email Sub Main() Dim myWebRequest As WebRequest Dim myStreamReader As StreamReader Dim strSubject, strBody As String Dim myMailMessage As Mail.MailMessage Dim mySmtpClient As Mail.SmtpClient ' Retrieve HTML via HTTP request to use as body of email myWebRequest = WebRequest.Create(My.Settings.Url) myStreamReader = New StreamReader( _ myWebRequest.GetResponse().GetResponseStream()) strBody = myStreamReader.ReadToEnd myStreamReader.Close() ' Get subject from settings ' and replace placeholder with current date strSubject = My.Settings.EmailSubject strSubject = strSubject.Replace("<date>", _ FormatDateTime(Now(), _ DateFormat.ShortDate)) ' Create email message myMailMessage = New Mail.MailMessage(My.Settings.EmailFrom, _ My.Settings.EmailTo, _ strSubject, _ strBody) If My.Settings.EmailCC <> "" _ Then myMailMessage.CC.Add(My.Settings.EmailCC) If My.Settings.EmailBCC <> "" _ Then myMailMessage.Bcc.Add(My.Settings.EmailBCC) myMailMessage.IsBodyHtml = My.Settings.EmailHtml ' Send email mySmtpClient = New Mail.SmtpClient() mySmtpClient.Host = My.Settings.SmtpServer mySmtpClient.Send(myMailMessage) End Sub End Module
非常に簡単なコードなので、説明にはあまり時間をかけないことにします。慣れない人は、あらゆるところでMy.Settingsを参照している点が不思議に見えるかもしれません。これは先ほど定義した設定にアクセスするための名前空間です。
これでひとまず形が整いました。開発環境からアプリケーションをビルドして実行し、動作を確認しましょう。[Debug]から[Start Debugging]をクリックするか、F5キーを押してください。
エラーが起こる場合は、URLが間違っているか、SMTPサーバに接続できない、あるいはSMTPサーバがロックダウンされていることが関係していると考えられます。SMTPサーバ関連の問題を解決するには、SMTPクライアントオブジェクトに資格情報を設定する必要があるかもしれません。
エラーがなければ、黒いコンソールウィンドウのようなものが一瞬開いてから消えます。これは期待どおりの動作です。このアプリケーションは誰もログオンしていないときに実行するよう設計されたものなので、視覚的なフィードバックは提供しません。メールがネットワークを経由して受信ボックスに送信されるまで、そのまましばらく待ってください。
アプリケーションが期待どおりに動作したら、[Build]メニューから[Build Http2Email]を選択してください。プロジェクトフォルダのbin\Releaseサブフォルダに実行可能ファイルと設定ファイルが作成されます。

これらのファイルを、アプリケーションの実行をスケジュールしたいコンピュータ上にコピーする必要があります。
これまでに定義した設定を覚えておいてください。「Http2Email.exe.config」ファイルをメモ帳で開き、ファイルの一番下までスクロールすると、格納されているすべての設定と値をXML形式で見ることができます。
テストのために1か所変更する場合、あるいは後から設定を変更する必要が出てきた場合は、このテキストファイルを編集するだけで、次回のアプリケーション起動時から新しい値が読み込まれるようになります。Visual Studioを起動したり、再コンパイルなどをしたりする必要はありません。とても便利な機能ですね!
スケジューリングの説明に入る前にもう一度言っておきたいのは、今回のサンプルアプリケーションは単にHTTPリクエストを出してメールを送信するだけですが、読者の皆さんがコンソールアプリケーションを作成するときには何をしても自由だということです。.NET Frameworkにはフルアクセスが可能ですし、グラフィカルユーザーインターフェースがないだけで、後は自由に実装できます。
