WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:メール送信相手を選択したい

0:[投稿] 244 [2002/03/18 14:01 ][環境:MAC+IE UNIX系+Perl]

こんにちは。

こんな感じのフォームを作ったとして、↓
http://www5.plala.or.jp/nisisi/aa.html
(それぞれの名前にはmailto:設定がされています)

チェックボックスを付けた人にだけメールを送るようにする、
というのは可能でしょうか?
そういったcgiを配布しているサイトをご存じの方
いらっしゃいましたら教えて貰えませんでしょうか?


1:[回答] ヨシミ [2002/03/18 14:43 ]

サンプルでは全員 mailto:aaa@aaa.co.jp となっておりますが、
全員が同じメールアドレスでしたら個々に送るという処理は不可能だと思います。

もしも
chosuke@dorif.x.jp
ken@dorif.x.jp
cha@dorif.x.jp
といった、それぞれのメールアドレスに送るのでしたら可能です。

適当なスクリプトの
bcc に、チェックボックスで指定された、
各メールアドレスをカンマ区切りで並べるだけで出来ます。

ただ、これは各送信者に「決まった内容」を送るのでしょうか。
それとも、毎回違った内容を送るのでしょうか。

違う内容ならば、textarea 属性などを設け、
それをメール本文部に入れてあげましょう。


2:[回答] 244 [2002/03/18 15:34 ]

ヨシミさん、どうもありがとうございます。

<サンプルでは全員 mailto:aaa@aaa.co.jp となっておりますが、

あ、すいません。違うメールアドレスに同じ内容を送る、というのが前提です。違うアドレスならば可能なんですね。

早速やってみます。
結果は事後報告致します。


3:[回答] ヨシミ [2002/03/19 14:49 ]

おそらく以下みたいなスクリプトになると思います。

#!/usr/local/bin/perl

require '../jcode.pl'; # jcode.pl のパス
$sendmail = '/usr/lib/sendmail'; # sendmail のパス(分からなかったらISPとかに聞こう)

$script = './send.cgi'; # このスクリプトの名前

# メンバーの名を半角スペース区切りで羅列する
my @member = qw(チョースケ けん 茶);

# 名と同順でメンバーのメアドを同様に羅列する
my @emailaddr = qw(chosuke@aaa.com ken@aaa.com cha@aaa.com);

$adminmail = 'nisisi@coral.plala.or.jp'; # 送信確認メールの宛先(管理者のメアドとか)

# 以下は実際の処理

if($ENV{REQUEST_METHOD} eq "POST"){
   read(STDIN,$input,$ENV{CONTENT_LENGTH});
} else {
   $input = $ENV{QUERY_STRING};
}

foreach ( split('&', $input ) ){
   ($name, $value) = split('=',$_,2);
   $value =~ s/\+/ /g;
   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
   $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
   $html{$name} = $query{$name} = $value;

}

if ($query{'post'} eq 'send') { &run; exit;}
else { &form; exit;}


sub run {

&jcode'convert(*mail_body,'jis');
&jcode'convert(*subject,'jis');

open(MAIL,"| $sendmail -t") || &error(op);

print MAIL "$query{message}\n";

for ($i=0;$i<@member;$i++) {
if ($query{"$i"}) { $list = $list . $emailaddr["$i"] . ','; }
}

chop $list;

print MAIL "To: $adminmail\n";
print MAIL "Cc: $list\n";
print MAIL "From: $adminmail\n";
print MAIL "Subject: $query{subject}\n";
print MAIL "$query{message}\n";

close(MAIL) || &error();

&header(complete);
$query{message} =~ s/\r/<br>/g;

print<<"_TOP_";
<p>以下のような情報を送信いたしました。</p>
<p>To: $adminmail<br>
Cc: $list<br>
From: $adminmail<br>
Subject: $query{subject}<br>
----------------------------------------<br>
$query{message}
</p>
</body></html>
_TOP_
exit;
}

sub header {
print "Content-type: text/html\n\n";
print "<html><head><title>$_[0]</title></head><body>";
}

sub form {
&header(mailform);
print<<"_TOP_";
<body>
<form action="$script">
<p>題名 : <input type="text" name="subject" size="50" value="月間ジョジョ通信"><br>
送信先選択 :<br>
_TOP_
for ($i=0;$i<@member;$i++) {
    print "<input type=\"checkbox\" name=\"$i\"><a href=\"mailto:$emailaddr[\"$i\"]\">$member[\"$i\"]</a><br>";
}
print<<"_TOP_";
本文 :<br>
<textarea rows="10" cols="70" name="message">今月のお知らせ
</textarea><br>
<input type="hidden" name="post" value="send">
<input type="submit" value="メール送信">
</form></body></html>
_TOP_
}

sub error {
&header(error);
if ($_[0] eq 'op') { $cont = 'sendmail起動';}
else { $cont = 'メールの送信';}
print "<p>$contは失敗に終わった。</p></body></html>";
exit;
}

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World