BloggerへASP.NETで作った問合せ画面を埋め込む②

前回提示したデザインソースのコントロール「btnSubmit」の属性「onClick」にメソッド「btnSubmit_Click」が割り当ててあったと思います。

ASP.NETはサーバサイドのプログラムで、ブラウザサイドで動作するJavascriptとは言語も異なるのですが、デザインソースは殆ど普通のHtmlと同一です。

ユーザが「送信」ボタンをクリックすると、そのイベントがサーバへ伝えられC#で作成されたメソッドへと通知される仕組みとなっています。

btnSubmit_Click」メソッド内で、メールアドレスの形式に誤りがないかなどを各コントロールの内容を検証してから、問題ない場合にのみメールを送信するようにします。
Javascriptで入力内容の検証をするプログラムを組み込むのはユーザビリティの点で重要ですが、その検証プログラムを必ず通ったメッセージがポストされてくるとは限りません。

通常の使い方では検証されるハズですが、メッセージを送信するサーバのアドレスを知っていればメッセージを偽装するなど悪意あるプログラムを作ることは可能なので、トラブル回避のためにサーバ側での検証は必ず実装しなければなりません。

C#ソースコード

デザイン画面にて「送信」ボタンをダブルクリックすることで、属性「onClick」に割り当てられたメソッドを@VSが検索し、存在しなければ中身が空の関数を作成してくれます。
存在していれば、そのメソッドを表示してくれますので、その内部にメールを送信するプログラムを書いてやればいい訳です。
メールを送信する機能を使用するには「System.Net.Mail, System.Net」コンポーネントネームスペースを参照設定しておきます。
C#ソースファイルの先頭に「using (コンポーネントネームスペース)」といった形式で何行か既定で記載されていますので、追加してやります。
また、検証用に「System.Text.RegularExpressions」ネームスペースも使いますので同様に追記して下さい。

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

using System.Text.RegularExpressions;
using System.Net.Mail;
using System.Net;


public partial class FormMail : System.Web.UI.Page
{

   protected void btnSubmit_Click(object sender, EventArgs e)
   {
       // 入力エラーの表示欄をクリアして初期化
       this.labMsgMail.Text = "";
       this.labMsgName.Text = "";
       this.labMsgSubject.Text = "";

       // 名前が空か未定義でないかを検査
       if (string.IsNullOrEmpty(this.txtName.Text))
       {
         this.labMsgName.Text = "※ お名前が入力されていまません";
         return;
       }

       // 正規表現で正しいメールアドレスの形式であるかを検査
       Regex regex = new Regex(@"^[-_\.a-zA-Z0-9]+\@[-_\.a-zA-Z0-9]+$");
       Match m = regex.Match(this.txtMail.Text);
       if (!m.Success)
       {
         this.labMsgMail.Text = "※ メールアドレスが不正です";
         return;
       }
       if (string.IsNullOrEmpty(this.txtSubject.Text))
       {
         this.labMsgSubject.Text = "※ 内容が入力されていまません";
         return;
       }


       String smtpServer = "smtp.gmail.com";// gmailアカウントの場合のMailサーバ
       String account = "sender-account@your-domain.com";// システムが使用するアカウント
       String bccAccount = "recieve-account@your-domain.com";// 自分の受信用アカウント
       String password = "●●●●"; // 送信ユーザ「account」のパスワード

       MailMessage mail = new MailMessage();
       mail.BodyEncoding = System.Text.Encoding.GetEncoding("UTF-8");
       mail.From = new MailAddress(account , "お問合せフォーム");
       mail.Bcc.Add(bccAccount);
       mail.To.Add(new MailAddress(this.txtMail.Text, this.txtName.Text));
       mail.Subject = "お問合せ受付メール";
       mail.Body = "【" + this.txtName.Text + "<" + this.txtMail.Text
         + ">】 さんからお問合せです。\r\n"
         + "\r\n【 お問合せ内容 】\r\n■このメールは、自動送信されています。■\r\n"
         + "\r\n\r\n" + "".PadRight(60, &#39;-&#39;) + "\r\n"
         + Server.HtmlEncode(this.txtSubject.Text)
         + "\r\n\r\n" + "".PadRight(60, &#39;-&#39;)
         + "\r\n身に覚えのない場合は、お手数ですが破棄して下さい。";

       try
       {
      
         SmtpClient smtp = new SmtpClient(smtpServer, 25);
         smtp.EnableSsl = true;
         smtp.Credentials = new NetworkCredential(account, password);
         smtp.Send(mail);

         // 正しく送信されました。

         Server.Transfer("MailComplete.aspx");

       }
       catch
       {
         this.labMsgMail.Text = "SMTPエラーでメール送信出来ませんでした。";
       }

   }

}


正しくメールが送信されるとFormMail.aspxと同じ階層に別途作成した「MailComplete.aspx」ページの内容をユーザに送信して完了しています。
下図のようなユーザにメールが正しく送信された事を示すメッセージ画面にしておくと良いでしょう。
これで、ASP.NETのプログラムは完成です。
@Bloggerの静的ページ(記事でも構いませんが)のHtml編集画面で以下の例のように「iframe」タグを張り付けて、サーバに配置したFromMail.aspxのURLにしてやればOKです。

<iframe frameborder="0" height="500px" marginheight="0" marginwidth="0" src="http://your-domain.com/formmail.aspx" width="80%">読み込み中...</iframe> 

コメント(0)

コメントを投稿

関連記事
ASP.NET
Blogger
問合せ画面
このガジェットでエラーが発生しました