SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

定期実行する.NETコンソールアプリケーションの作成

10分間お手軽.NETプログラミング

コマンドラインアプリケーションの作成

 これから作成するサンプルアプリケーションは、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にはフルアクセスが可能ですし、グラフィカルユーザーインターフェースがないだけで、後は自由に実装できます。

次のページ
アプリケーション実行のスケジューリング

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

John Peterson(John Peterson)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2652 2008/07/18 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー