CGI-BBS > CGI > Perl > 自動応答返信(?)メールの設定


カレッヂ
カレッヂ


質問者 ポー  投稿日 2/14(水) 13:45:34
初めて書き込みます。初心者すぎて質問するのも迷ったのですが、
あちこち見て回ったものの、どうしてもわからないので、教えてください。

申し込みフォームとかに記入すると、確認画面がでてくるのがあるんですが、
あれの設定の仕方教えてください。
それから、この内容で送信されましたよ、という自動応答メール(?)のような
ものもつけたいです。

CGIはこちらのフォームメールを使用しております。
宜しくお願いします。
回答者 さくら  [削除]  投稿日 2/15(木) 01:35:50
>申し込みフォームとかに記入すると、確認画面がでてくるのがあるんですが、
あれの設定の仕方教えてください。

FORMからSUBMITボタンで送信すると、CGIスクリプトが呼び出されます。
FORMから送られたデータを処理して、確認画面を出力します。
(HTMLタグと一緒に、データも確認用に出力します。ここで、このインスタンスは終了します。)
確認画面のSUBMITボタンで送信すると、又CGIスクリプトが呼び出されます。
ここから送られてきたデータを処理して、お礼の画面を出力します。
同時に、メールを送信します。
(これは、一般的に言う、自動応答メールとは違いますが、CGIスクリプトから、自動でメールを出すので、あながち 間違いとも言えませんね。)

流れはこのような感じですが、CGIスクリプトは、一回づつインスタンスが終了してしまいますので、最初のFORMから呼ばれたものなのか、確認画面から呼ばれたものなのかを判断する為の
情報を貴方が埋め込む必要があります。
例えば、HIDDEN 属性を使うなどです。
最初のFORMには、
<INPUT TYPE="HIDDEN" NAME="action" VALUE="firstform">
確認用では、
<INPUT TYPE="HIDDEN" NAME="action" VALUE="scondform">
のように情報を埋め込んでおきます。
この情報によって処理を変えていきましょう。

CGIスクリプトからメールを送信するには、UNIX ユーティリティの
sendmail を使用します。
sendmailを使うには、
パイプを使ってsendmailにデータを送ります。
注意する事は、mail は 文字コードをjisに変換しなければいけません。
nkf を使えば、一緒にパイプする事ができますよ。



質問者 ポー  [削除]  投稿日 2/15(木) 12:36:07
詳しい回答ありがとうございます。
まず、確認画面に付いては<input type="hidden" name="no_check" value="on">になっていたので、これを替えればOKですよね?
それから、自動応答メールですが、フォームに書きこんでもらった内容が確認ということで送られる形を考えています。申し込みしたんだけど、確認メールが来ないから不安・・・という相談を受けてしまったので、いちいちこちらから返答のメールをするのではなく、そのまま申し込んだ人のメールアドレスに行くようにしたいです。
それと、CCはつけられますか?それも指定したアドレスをCCにつけたいです。つまり、$mailtoが2つ欲しいということです。その場合はCCを使えばいいんですよね?

たくさん質問で申し訳ないのですが、今手を加えているフォームに<!--Webbot bot="HTMLMarkup" TAG="XBOT" StartSpan-->というのが上記に書いたようなタグ(<input....>)の前についています。これははずしてはいけないのでしょうか?
以前他の人がこのフォームに手を加えているために、そのまま使用しています。
回答者 さくら  [削除]  投稿日 2/16(金) 01:37:49
一応断っておきますが、昨日の解答も含めて、
一般的な手法について示したものです。裏技さんのフォームメールのスクリプトのカスタマイズ方法を示したわけではありません。
ですから、
>確認画面に付いては<input type="hidden" name="no_check" value="on">になっていたので、これを替えればOKですよね?
これについても、明言できません。
裏技さんのスクリプトを見ていないので申し訳有りません。

例えばこう言う事です。
最初のform
<form action="cgiscriptのurl" method="POST">
<input type="hidden" name="action" value="first">
<input type="text" name="name">
<input type="text" name="email">
<input type="submit" value="送信">

このデータをcgiスクリプトで受け取る
$acton と $name と $email にそれぞれactionの値とnameの値とemailの値を格納したとする

そして
if($action eq 'first') {
  #最初のformからなので確認画面を出力するコードを書く
 #http ヘーダー、及びhtmlヘッダーを出力してあればあとはbodyを出力
 print <<EOF;
  $name
  $email
  間違い無ければ送信ボタンをどうぞ
  <form action="cgiscriptのurl" method="POST">
  <input type="hidden" name="action" value="second">
  <input type="hidden" name="name" value="$name">
  <input type="hidden" name="email" value="email">
  <input type="submit" value="送信">
  </body></html>
EOF
}
elsif($action eq 'second'){
  #確認画面からなので正式に処理する
 #ありがとうの画面出力、必要なら上記のように、送信された変数を使えば良い
  #ログファイルへの書きこみ処理などを行なう
  #そしてsendmailへといく事になる。
  #mailagentと言う下記サブルーチンで処理する
 mailagent();
}

sub mailagent{
#ここにメール送信コードを書く
#$nkfにはnkfのパス $sendmailにはsendmailのパス $myemailには貴方のe-メールアドレス
#がそれぞれ格納されているものとする

open (MAIL, "| $nkf -j | $sendmail -t $email") ;
print MAIL <<EOF;
From: 貴方のwebサイト名など
To: $email
Cc: $myemail
Subject: タイトル
Reply-To: $myemail
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

一行あけて本文を書く
$name
$email
受け付けました。
thanks
EOF
close(MAIL);

こんな感じになる。
Ccを使いたい時は -t オプションを使う。
-t を使うと、To Cc Bcc を使えるようになる。
上記の例でも使っている。

簡単な例を示したが、貴方がカスタマイズするのに参考になれば嬉しい。




質問者 ポー  [削除]  投稿日 2/16(金) 09:32:22
とっても参考になります!!!ありがとうございます。
具体的に教えていただいたことがなかったので、
とっても嬉しいです。
実際、あちらこちらのスクリプトを見てはなやんでいたのです。
サーバー管理者に問い合わせたら、一応クライアントで試してから
って言われました。
がんばってやってみます!本当にありがとうございました!

返信(回答)する


Web裏技