ユーザに複数の送信先からひとつを選ばせたい

nishizさん (2016-10-26 10:58:18) www.nishiz.com/test/sender/

メールフォームCGIを利用させていただいております、nishizと申します。インターフェースが美しいので気に入っています。

▼ユーザに複数の送信先からひとつを選ばせたい
ttp://sutara79.hatenablog.com/entry/2015/10/19/142546

上記記事を参考にしまして「方法2: 単一のsend.cgiの中で処理する」の手順通りやってみました。
具体的には下記の通りです。


1)
index.html内でformのmethod属性をgetに設定し、セレクトボックスを追加しました。
--(↓ここから)--
<form id="mailform" method="get" action="mailform/send.cgi" onsubmit="return sendmail(this);">

<select id="address" name="送信先(必須)">
<option value="営業部">営業部</option>
<option value="人事部">人事部</option>
<option value="総務部">総務部</option>
<option value="経理部">経理部</option>
</select>
--(↑ここまで)--


2)
send.cgi内に下記の内容を追加しました。
--(↓ここから)--
my %hash_mailto = (
’営業部’ => ’aaa@gmail.com’,
’人事部’ => ’bbb@gmail.com’,
’総務部’ => ’ccc@gmail.com’,
’経理部’ => ’ddd@gmail.com’,
);
my $name_mailto = ’送信先’;

# GET送信された内容を取得する
my $buffer = $ENV{’QUERY_STRING’};

# 項目ごとに分けて配列に格納する
my @pairs = split(/&/, $buffer);

foreach my $pair (@pairs) {
# 各項目の内容を名前と値に分割する
my ($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

# 項目が送信先の場合
if ($name eq $name_mailto) {
while (my ($h_key, $h_val) = each(%hash_mailto)) {
if ($value eq $h_key) {
# 選ばれた送信先のメールアドレスを「$conf{’mailto’}」の値とする
$conf{’mailto’} = $h_val;
}
}
}
}
--(↑ここまで)--


以上の作業を行い、パーミッションも適宜設定しました。
フォームの内容は無事に管理者宛に届きました。
しかし、送信先を別のものに変更しても、全て管理者宛に届きます。指定した送信先に変更されません。

以上の様な状況です。この場合、どこをチェックすればよろしいでしょうか。

Re:ユーザに複数の送信先からひとつを選ばせたい

和田 (2016-11-01 10:13:53) www.synck.com

実際のソースコードをみないとなんとも言えませんが、クエリを処理する部分に関してはsend.cgi内のgetQuery関数で行っているため、正常にクエリを取得できていない可能性はあります。

こちらでformというハッシュ変数に値をいれているので、それをそのまま使っていただければうまくいくかもしれません。