前回提示したデザインソースのコントロール「btnSubmit」の属性「onClick」にメソッド「btnSubmit_Click」が割り当ててあったと思います。
ASP.NETはサーバサイドのプログラムで、ブラウザサイドで動作するJavascriptとは言語も異なるのですが、デザインソースは殆ど普通のHtmlと同一です。
ユーザが「送信」ボタンをクリックすると、そのイベントがサーバへ伝えられC#で作成されたメソッドへと通知される仕組みとなっています。
「btnSubmit_Click」メソッド内で、メールアドレスの形式に誤りがないかなどを各コントロールの内容を検証してから、問題ない場合にのみメールを送信するようにします。
Javascriptで入力内容の検証をするプログラムを組み込むのはユーザビリティの点で重要ですが、その検証プログラムを必ず通ったメッセージがポストされてくるとは限りません。
通常の使い方では検証されるハズですが、メッセージを送信するサーバのアドレスを知っていればメッセージを偽装するなど悪意あるプログラムを作ることは可能なので、トラブル回避のためにサーバ側での検証は必ず実装しなければなりません。
存在していれば、そのメソッドを表示してくれますので、その内部にメールを送信するプログラムを書いてやればいい訳です。
メールを送信する機能を使用するには「System.Net.Mail, System.Net」コンポーネントネームスペースを参照設定しておきます。
C#ソースファイルの先頭に「using (コンポーネントネームスペース)」といった形式で何行か既定で記載されていますので、追加してやります。
また、検証用に「System.Text.RegularExpressions」ネームスペースも使いますので同様に追記して下さい。
下図のようなユーザにメールが正しく送信された事を示すメッセージ画面にしておくと良いでしょう。
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, '-') + "\r\n" + Server.HtmlEncode(this.txtSubject.Text) + "\r\n\r\n" + "".PadRight(60, '-') + "\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>
関連記事
ASP.NET
Blogger
問合せ画面
コメント(0)
コメントを投稿