前回提示したデザインソースのコントロール「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
問合せ画面
.png)
コメント(0)
コメントを投稿