解説

実例で学ぶASP.NETプログラミング

第13回 オートマチックな情報確認画面の構築

小田原 貴樹(うりゅう)
2004/06/12

ASP.NETでメール送信を実装する

 従来のASPでは、外部コンポーネント(例えばBASP21など)を利用しなければ実現が難しかったSMTPによるメール送信処理も、ASP.NETでは驚くほど容易に実装できる。送信そのものよりもむしろ、純粋なテキスト形式で作成しなければならないメール本文の作成の方が手間なくらいである。それでは、メール本文作成とメール送信のそれぞれの関数を作成しよう。

 まずはメール本文の作成関数を以下に示す。

Public Function UriBodyC(ByVal sbas As DataView, ByVal slc As DataView, ByVal max As Integer) As String
  Dim Bdy As String
  Bdy = "V-STOREデモ・サイト「VS屋」売り上げメールデモです。" & _
    "これは購入ユーザーに送られます。" & _
    Chr(13) + Chr(10) & Chr(13) + Chr(10)
  Bdy = slc(0)("氏名") & _
    "様お買い上げ、ありがとうございます。" & Chr(13) + Chr(10)
  Bdy = "この度お買い上げいただいた商品は以下のとおりです。" & _
    Chr(13) + Chr(10) & Chr(13) + Chr(10)

  Dim I As Integer
  For I = 0 To sbas.Count - 1
    Bdy = Bdy + _
      "商品名:" & sbas(I)("商品名") & Chr(13) + Chr(10)
    Bdy = Bdy + _
      "商品種類:" & sbas(I)("種類") & Chr(13) + Chr(10)
    Bdy = Bdy + _
      "容量:" & sbas(I)("容量") & Chr(13) + Chr(10)
    Bdy = Bdy + _
      "数量:" & sbas(I)("注文数") & Chr(13) + Chr(10)
    Bdy = Bdy + _
      "金額:" & sbas(I)("金額") & Chr(13) + Chr(10) & _
      Chr(13) + Chr(10)
  Next

  Bdy = Bdy + _
    "合計金額:" & max & Chr(13) + Chr(10) & Chr(13) + Chr(10)
  Bdy = Bdy + _
    "上記金額を、銀行振込で以下までお振り込みください。" & _
    Chr(13) + Chr(10)
  Bdy = Bdy + _
    "VSTORE銀行 NET支店 普通 0123456(ネ)ブイストア" & _
    Chr(13) + Chr(10) & Chr(13) + Chr(10)
  Bdy = Bdy + _
    "またのご利用をお待ちしております。" & _
    "ありがとうございました。" & Chr(13) + Chr(10)
  Return Bdy
End Function
メール本文の作成関数

 UriBodyCメソッドは、パラメータとして「売上明細情報」「顧客情報」「購入合計金額」を受け取り、ユーザーに送信するメールの本文を作成する関数である。コードの内容は文字列変数「Bdy」に必要な文章を追加していっているだけの非常に単純な内容なので、細かく解説はしない。ASP.NETで改行を指示するときには「Chr(13) + Chr(10)」(CR+LFを意味する)と記述する点だけを覚えておいていただきたい。もしくは「vbCrLf」と記述しても改行指示となるので、どちらかを利用してほしい。

 次にUriBodyCメソッドで作成されたメール本文を実際に送信する関数が、以下のmailsendメソッドだ。

Public Sub mailsend(ByVal SSERV As String, ByVal FROM As String, ByVal MTO As String, ByVal SUBJECT As String, ByVal BODY As String)
  System.Web.Mail.SmtpMail.SmtpServer = SSERV
  System.Web.Mail.SmtpMail.Send(FROM, MTO, SUBJECT, BODY)
End Sub
メール本文を実際に送信する関数

 mailsendメソッドは、パラメータとして以下のパラメータを受け取り、メールを送信する関数である。

  • 送信に利用するSMTPサーバ・アドレス
  • 送信元メール・アドレス
  • あて先メール・アドレス
  • メールの件名
  • メールの本文

 ASP.NETでSMTPによるメール送信を行う場合には、System.Web.Mail名前空間にあるSmtpMailクラスを利用するのが最も容易な方法となる。SmtpMailクラスを利用すれば2行のコードを記述するだけで、メール送信が実装できる。コードの内容を解説しよう。

 1行目は、SmtpMailクラスのSmtpServerプロパティに、メール送信で利用するSMTPメール・リレー・サーバのアドレスを設定している。前述の注文確定処理のコード67行目と68行目に記述したアドレスはもちろん仮のアドレスなので、実際に利用する際には、各人の環境で利用可能なSMTPサーバのアドレスを記述してほしい。この指定では、IPアドレスでもドメイン名でも内部環境であればコンピュータ名だけでも問題ない。

 2行目は、SmtpMailクラスのSendメソッドを利用して実際にメールを送信する処理を行っている。Sendメソッドのオーバーロードはいくつかあるが、ここで利用している「送信元・あて先・件名・本文」の構文が通常のメール送信の場合には最も使いやすいだろう。

 ASP.NETでは、たったこれだけの処理でメール送信が実装できる。これで注文確定処理はすべて実装できた。最後に[戻る]ボタンと[キャンセル]ボタンのイベント処理の実装と、注文完了ページの作成を行おう。

 すべての入力チェックがOKだった場合には、注文情報確認画面に遷移するための処理を実行しなければならないが、これは次回解説するので、ここでは入力チェック機能の動作だけを確認しておいてほしい。

注文完了ページを作成する

 先に、注文情報確認画面の残り2つのボタンのイベント処理を実装しよう。

Private Sub BACKB_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BACKB.ServerClick
  Server.Transfer("REG.ASPX")
End Sub
注文情報確認画面で[戻る]ボタンが押されたときの処理
今回作成した注文情報確認画面であるREGVIEW.ASPXのコードビハインド・ファイルで、BACKB_ServerClickイベントのコードとして記述する。

 [戻る]ボタンを押した際には、注文情報入力画面に遷移しているだけだ。ここではASP.NETのコードを利用して遷移するようにしたが、JavaScriptのHistory.Backを利用した方が余計な通信が発生しないのでよいかもしれない。

Private Sub CANSELB_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CANSELB.ServerClick
  Session.Abandon()
  Server.Transfer("main.aspx")
End Sub
注文情報確認画面で[キャンセル]ボタンが押されたときの処理
今回作成した注文情報確認画面であるREGVIEW.ASPXのコードビハインド・ファイルで、CANSELB_ServerClickイベントのコードとして記述する。

 [キャンセル]ボタンを押した際には、注文そのものを破棄する必要があるので、セッションをAbandonメソッドでキャンセルしたうえで、トップページに遷移している。

 最後に注文完了ページを作成しよう。注文完了ページのファイル名は「REGFIN.ASPX」と指定している。デザイン作業を行う前に「Webフォーム」の追加処理を行っておいてほしい。注文完了ページのデザインは下図のとおりだ。

注文完了ページ(REGFIN.ASPX)

 処理を行わない非常に単純なページなので、デザイン作成についてもあらためて解説はしない。細かな点は参考用のソース・ファイル群の中を開いて確認してほしい。

 ここまでの作業で注文情報確認画面は完成した。情報のデータベースへの格納、クッキーの追加、クッキーからの情報の取得、メール送信など、それぞれの機能がきちんと動作するかどうかをテストしてみてほしい。また、これでショッピング・サイトとして注文にかかわるフローのすべてが実装できたことになるので、連載のこれまでに構築してきた部分を含めていろいろと触ってみていただきたい。

次回予告

 今回は、注文情報確認画面の作成について解説した。注文情報確認画面ではユーザーが入力した情報を表示するのはもちろんだが、注文確定処理も行う必要があり、情報のデータベースへの格納処理など、ほかのページに比べて処理量が多かったと思う。また、本記事タイトルの「オートマチックな」というのは、今回解説したクッキーやメール送信のことをイメージしている。どちらもショッピング・サイトだけではなく、Web系システムではさまざまな場面で利用できる便利な機能だ。しかも、今回解説した構文で、ほぼどんなパターンでも同様に利用できるので、ぜひ活用していただきたい。

 ASP.NETを習得するうえで重要なのは、膨大なクラスの中から、その機能を実装するのに有効なクラスを探し出すことにある。クッキーやメール送信などはその典型であり、クラスさえ探し出せればコーディングそのものは驚くほど容易に実装できる。何か新しい機能を実装する前には、まずMSDNドキュメントを首っ引きで参照してみることが重要だろう。

 さて、今回までで注文にかかわる処理はすべて解説した。次回は、この連載の最終回として「お問い合わせ」ページ作成や、これまでの連載の中で解説しきれなかった細かな要素についての解説を行う予定だ。連載全体を通してのまとめや、Visual Studio .NET 2003に関する解説なども行う予定である。

 本当に長らくお付き合いいただいたこの連載も、いよいよ次回で最後となる。最後までお付き合いいただければ幸いである。End of Article

【ASP.NETで作成されたショッピング・サイト紹介】

 久々の「ASP.NETで作成されたショッピング・サイト紹介」だが、このサイトもまた筆者が作成したサイトで、本当に手前みそで申し訳ない。Life-upオンラインショッピングは、ダイエット・サプリメントを中心に美容・健康商品を販売するショッピング・サイトだ。

 今回このサイトを紹介したのにはワケがある。この連載で利用しているデモ・サイト「VS屋」などと比較して、注文情報入力画面における入力項目の数がはるかに多いという特徴があるためだ。アンケートや配達希望日などASP.NETのコントロールを利用してさまざまな項目が入力できるようになっているので、参考にしていただきたい。

 また、このサイトは会員制をとっており、既存顧客はすべて会員として登録される。クッキーではなくID/パスワードによって既存顧客の情報を取得する形式となっているので、その辺りも参考になるかもしれない。

 

 INDEX
  実例で学ぶASP.NETプログラミング
  第13回 オートマチックな情報確認画面の構築
    1.注文情報確認画面のデザイン
    2.注文情報を一時的に格納する機能の実装
    3.画面表示とクッキー利用の実装
    4.注文確定処理の実装
  5.ASP.NETでのメール送信の実装

インデックス・ページヘ  「解説 :実例で学ぶASP.NETプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間