CGI-BBS > 情報収集 > フォームメール > フォームメールで送信先アドレスをチェック項目によって変更。


カレッヂ
カレッヂ


質問者 miki  投稿日 10/30(水) 10:29:16
今日は。
フォームメール内にラジオボタンで選択する箇所を設けております。
そのラジオボタンのチェック項目ごとに、送信するメールアドレスを変えたいのですが、
その場合$mailtoをどのように書いたら良いのか分かりません。
どなたかお分かりの方がいらっしゃいましたら教えて頂けませんか?
宜しくお願い致します。

プロバイダ参照:
サーバのOS:(未選択)
パソコンのOS:WinNT系
エディタ:秀丸
FTPソフト:FFFTP
サーバ移転:していない
改造:していない
CGI習熟度:middle

回答者 呑兵衛@大阪  [削除]  投稿日 10/30(水) 19:49:17
占いの結果表示みたいにするんですか?
a,b,cが選択されたら、xxx@yyy.zzz へ
e,f,gが選択されたら、aaa@bbb.ccc へ、、、のように。
それとも、アドレスそのものを選択するラジオボタンがあるんでしょうか?
それによってがらりと変わるし、今のあなたには手に負えなくなることにもなります。
前者ならそうなります。
後者なら、form のラベルを mailto とでもして、value にそれぞれアドレスを仕込む。
webform.cgi の
$mailto = '送信先Eメールアドレス'; を削除し、
if ($name =~ /^email/i || $name =~ /^e\-mail/i) {
    $value =~ s/ / /g;
    if ($value =~ / / || $value =~ /;/) { $value = ""; }
    if (!($value =~ /(.*)\@(.*)\.(.*)/)) { $value = ""; }
    $email = $value;
}
の下に
if ($name =~ /^mailto/) { $mailto = $value; }
です。
回答者 ゆう  [削除]  投稿日 9/6(土) 01:41:08
こんにちは。

私も同じことで悩んでいたので、「呑兵衛@大阪」様に教えて頂いた通りに
書いてみました。ご教示頂いてありがとうございます。

私の場合は、質問ページを作る際に、最初に何についての質問かを選んでもらって、
それで何を選んだかによって送信先を変えたいというものでした。

その項目は「業務内容」「採用情報」「その他」の三つなのですが、
ひとつ困った点がありまして、確認画面で
「mailto = mail@yahoo.co.jp」
と出てしまうのを、出来れば
「質問内容 = 業務内容」といった感じで出せたら・・と思っています。

そのために、
<input type=radio name="質問内容" value="業務内容" checked>業務内容
<input type=hidden name="mailto" value="mail@yahoo.co.jp">

と書いてみましたが、ふたつのinput type(radioとhidden)の関連付けが出来ていないようで、
残りの「採用情報」と「その他」も同じように設定したのですが、
どのアドレスに飛ぶかがその時によって変わってしまいます。

ラジオボタンで選んだ内容によって送信先を変えて、
しかも確認画面ではそのラジオボタンの内容を出すようにするには
どうしたら良いでしょうか?

すみませんが、よろしくお願い致します。
回答者 しあわせのツボ  [削除]  投稿日 9/6(土) 02:29:56
valueに生のアドレスを仕込むのは危険です
(嘘フォームページを作られてあらぬ所に送信される可能性があります)。
スクリプト上で、ラジオボタンのvalueを見て
if ($q1 eq "A1") { $mailto = "aaa@example.com"; }
elsif ($q1 eq "A2") { $mailto = "bbb@example.com"; }
...
elsif ($q1 eq "An") { $mailto = "xxx@example.com"; }
else { &error("回答が正しくありません"); }
のようにスイッチすべきです。
回答者 ゆう  [削除]  投稿日 9/6(土) 10:18:15
ご回答ありがとうございます。

早速やってみましたが、うまく作動してくれません・・。

HTMLのほうには、

<input type=radio name="q1" value="A1" checked>業務関連
<input type=radio name="q1" value="A2">採用情報
<input type=radio name="q1" value="A3">その他

と書いて、

CGIのほうには、

if ($name =~ /^email/i || $name =~ /^e\-mail/i) {
    $value =~ s/ / /g;
    if ($value =~ / / || $value =~ /;/) { $value = ""; }
    if (!($value =~ /(.*)\@(.*)\.(.*)/)) { $value = ""; }
    $email = $value;
}

の文の下に、

if ($q1 eq "A1") { $mailto = "sample@msn.ne.jp"; }
elsif ($q1 eq "A2") { $mailto = "sample@yahoo.ne.jp"; }
elsif ($q1 eq "A3") { $mailto = "sample@hotmail.com"; }
else { &error("回答が正しくありません"); }

と書きました。

どこかに問題があるのでしょうか。
お手数をおかけしますが、教えて頂けたら嬉しいです。
よろしくお願いします。
回答者 やまだ  [削除]  投稿日 9/7(日) 01:17:11
--- webform.cgi.orig	Sun Sep  7 01:05:47 2003
+++ webform.cgi	Sun Sep  7 01:02:16 2003
@@ -16,10 +16,28 @@
 require 'jcode.pl';
 
 #■SENDMAILの設定
-$sendmail = '/usr/lib/sendmail';
+$sendmail = '/usr/sbin/sendmail';
 
 #■受信先メールアドレス
-$mailto = '送信先Eメールアドレス';
+#$mailto = 'yamada@localhost';
+my %mailto=(
+		business => {
+				'title' => '業務内容',
+				'addr' => 'yamada@localhost',
+				'form_val' => 'A1'
+		},
+		employment => {
+				'title' => '採用情報',
+				'addr' => 'root@localhost',
+				'form_val' => 'A2'
+		},
+		others => {
+				'title' => 'その他',
+				'addr' => 'nobody@localhost',
+				'form_val' => 'An'
+		},
+);
+
 
 #■名称
 $title = 'WebFORM';
@@ -90,6 +108,13 @@
 			$email = $value;
 		}
 
+		if ($name eq "mailto") {
+			for my $my_key(keys %mailto){
+				if ($value eq $mailto{$my_key}->{form_val}) { $mailto = $mailto{$my_key}->{addr}; $my_chk=1;}
+			}
+			if(! $my_chk){ &error("回答が正しくありません"); }
+		}
+
 		push(@DATA_N,$name); push(@DATA_V,$value);
 
 		$name =~ s/\</&lt;/g; $value =~ s/\</&lt;/g;
@@ -103,7 +128,9 @@
 if (!$mailcheck && $email eq '') { &error('Eメールを入力してください',''); }
 if ($mailcheck && $email eq '') { $email = 'anonymous@on.the.net'; }
 if ($spcheck eq "on") {	foreach (@DATA_V) { if ($_ eq "") { &error('送信不可','受信者の意向により、全ての項目を埋めないと送信できません.'); } }}
-if ($mailto eq '' || !($mailto =~ /(.*)\@(.*)\.(.*)/)) { &error('設定ミス','受信先メールアドレスが設定されていません.'); }
+for(keys %mailto){
+	if ($mailto{$_}->{addr} eq '' || !($mailto{$_}->{addr} =~ /(.*)\@(.*)/)) { &error('設定ミス','受信先メールアドレスが設定されていません.'); }
+}
 
 if ($nocheck eq "on") { &sendmail; }
 
@@ -126,10 +153,19 @@
 foreach (0..$count-1) {
 
 	print "<input type=hidden name=\"$DATA_NS[($_)]\" value=\"$DATA_VS[($_)]\">\n";
-	print "<tr><td bgcolor=\"#ffeedd\">$DATA_NS[($_)] <br></td>";
+	if($DATA_NS[($_)] eq 'mailto'){
+		$my_atrb='質問内容';
+		for my $my_key (keys %mailto){
+			if($DATA_VS[($_)] eq $mailto{$my_key}->{form_val}){ $my_val=$mailto{$my_key}->{title}; }
+		}
+	}else{
+		$my_atrb=$DATA_NS[($_)];
+		$my_val=$DATA_VS[($_)];
+	}
+	print "<tr><td bgcolor=\"#ffeedd\">$my_atrb <br></td>";
 
-	if ($DATA_VS[($_)] =~ /\n/) { print "<td bgcolor=\"#ffffff\"><pre>$DATA_VS[($_)]</pre></td></tr>\n"; }
-	else { print "<td bgcolor=\"#ffffff\">$DATA_VS[($_)]</td></tr>\n"; }
+	if ($my_val =~ /\n/) { print "<td bgcolor=\"#ffffff\"><pre>$my_val</pre></td></tr>\n"; }
+	else { print "<td bgcolor=\"#ffffff\">$my_val</td></tr>\n"; }
 	print "</td></tr>\n";
 }

こんなんで、うまくいくかな。
回答者 ゆう  [削除]  投稿日 9/9(火) 02:32:27
教えて頂いてありがとうございます!

早速やってみました。今度は、

1.確認画面のテーブルで、「項目」「内容」の1列だけ表示されて中身はなく、
  そのすぐ下に送信ボタンだけが出ます。
2.送信ボタンを押すと、「Eメールを入力してください」の表示がでます。

HTMLは
<input type=radio name="mailto" value="business" checked>業務関連
<input type=radio name="mailto" value="employment">採用情報
<input type=radio name="mailto" value="others">その他
と設定しました。
(valueはそれぞれ、"A1","A2",A3"でも試しましたが結果は同じでした)


あと、教えていただいたプログラムの最初に書いてある「+」や「−」の意味は、
「+」の行はつけ加えて「−」はもとからある行、ということですか?
(何もわからずすみません・・)

何度も本当に申し訳ありません・・・
また教えて頂けたら幸いです。よろしくお願いします。


回答者 やまだ  [削除]  投稿日 9/9(火) 02:52:30
><input type=radio name="mailto" value="business" checked>業務関連
><input type=radio name="mailto" value="employment">採用情報
><input type=radio name="mailto" value="others">その他

でなく、

<input type=radio name="mailto" value="A1" checked>業務関連
<input type=radio name="mailto" value="A2">採用情報
<input type=radio name="mailto" value="An">その他

で、

+は、付け加えるで、-は引くってことで。
(diffコマンドのunified表示のこと、patchあてるのに楽かなと思って。(UNIX))
回答者 ゆう  [削除]  投稿日 9/11(木) 16:59:47
ありがとうございます。
丁寧に教えて頂いたおかげでうまく作動させることが出来ました。

あと・・大変申し訳ないのですが、またお聞きしたいことがあります。

送信後の内容確認ページで、
------------------
mailto = A1
・
・
・
Submit =  確 認
mailto = test@yahoo.ne.jp
------------------

と表示されるのですが、出来れば
------------------
mailto = A1 を→ 質問内容 = 採用情報
------------------
として、
Submit =  確 認
mailto = test@yahoo.ne.jp
は表示しないようにしたいのです。

いろいろ試してみましたがうまくいきません・・。
何か方法がございましたら教えて頂けないでしょうか?
よろしくお願い致します。
回答者 やまだ  [削除]  投稿日 9/12(金) 02:48:32
@@ -126,10 +153,19 @@

で、そのへんは、処理できるようになっているはずです。よく確認してみてください。
回答者 makokin  [削除]  投稿日 10/30(木) 15:55:31
飛び込みですいません!

同じような悩みがあって、ここの書き込みを参考にさせて頂いているのですが、
form2mail.cgi(マルチパート対応フォームメール )にも同じような内容で改造を施す事はできないのでしょうか?

webform.cgi(フォームメール)には、「1つでも未記入項目があると送信できない」といった機能がありますが、makokinとしては「指定した項目が、未記入だと送信できない」という機能を加えて実現させたいもので・・・

返信(回答)する


Web裏技