メールフォームで
ホームページの問い合わせをクリックすると下記のコードでフォームページに飛びます。
print qq(Content-type: text/html; charset=Shift_JIS\n\n);
print <<END;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>メールフォーム</title>
</head>
<body>
<h1 class="title">メールフォーム</h1>
<form method="post" action="mail.pl">
<input type="hidden" name="a" value="exec">
件名(Subject) :<br />
<input type="text" name="subject" size="80" value=""><br />
宛先(To) :<br />
<input type="text" name="to" size="80" value=""><br />
差出人(From) :<br />
<input type="text" name="from" size="80" value=""><br />
本文(Body) :<br />
<textarea name="body" rows="10" cols="65"></textarea><br />
<p>
<input type="submit" value="送信">
</p>
</form>
</body>
</html>
END
そこで、内容を入力すると送信するようになのですが、
このアクションでmail.plのコード内で
my $mailto= 'aaaaa@aaaaaa.jp';
my $subject = '問い合わせ;
my $message = "テスト";
このmy の内容を変数を利用してメールフォームから呼び出し?したいと思います。
そのやり方をご教示ください。
また、mailtoの相手に送信してもらったら
自動的に定型文を返信するようにしたいです。
No.1ベストアンサー
- 回答日時:
CGI の仕組みにおいて <form method=post> で送られてくる情報は、
内容は標準入力から、長さは環境変数 CONTENT_LENGTH から取得できます。
ただそのままでは、ブラウザによってエスケープされたままの情報なので、
少々面倒な加工処理が必要です。
ブラウザから送信されるエスケープされた post 情報の例:
a=exec&subject=%E4%BB%B6%E5%90%8D&to=%E3%81%BB%E3%81%92&from=%E3%81%B5%E3%81%8C&body=%E3%81%B5%E3%82%93%E3%81%8C%E3%81%A8%E3%81%A3%E3%81%A8
ですので、その加工をおこなってくれるモジュールを使って取得しましょう。
例:
use CGI;
my $p = new CGI;
my $subject = $p->param('subject');
メールの自動返信を行いたいならば、
MTA に対して受信契機のスクリプト実行を設定することになります。
ただその方法は環境によって異なるので、
インフラ担当の方にお問い合わせください。
コメントありがとうございます。
CGI.pmはインストールはしています。
しかし、まだ使いかたがわかりません・・
質問のコードはmailform.pl
下記のコードがmail.pl
#!/usr/bin/perl -w
use Encode qw(from_to encode);
use Net::SMTP;
use strict;
my $from = 'xxxx@xxxxx.jp';
my $mailto= 'xxxx@xxxxx.jp';
my $mailcc= 'xxxx@xxxxx.jp';
my $subject = 'ホームページからのお問い合わせ';
from_to($subject, 'shiftjis', 'iso-2022-jp');
encode('MIME-Header-ISO_2022_JP', $subject);
my $header = << "MAILHEADER";
From: $from
To: $mailto
CC: $mailcc
Subject: $subject
Mime-Version: 1.0
Content-Type: text/plain; charset = 'ISO-2022-JP"
Content-Trensfer-Encoding: 7bit
MAILHEADER
my $message = "テスト";
from_to($message, 'shiftjis', 'iso-2022-jp');
my $smtp = Net::SMTP->new('xxxx-xxxx.jp');
if ( !$smtp ) {
print "メールサーバーにアクセスできません!";
exit;
}
#メール送信
$smtp->mail($from);
$smtp->to($mailto);
$smtp->to($mailcc);
$smtp->data();
$smtp->datasend($header);
$smtp->datasend($message);
$smtp->dataend();
$smtp->quit;
なのですが、回答してくださった答えはどこにどう入れればいいのでしょうか・?
自動返信はこれができた後に考えますorz
No.2
- 回答日時:
どうやってフォームの入力を取得しているのかは、貼り付けられたソースコードからはわかりませんが、フォームから渡される$to, $from, $body を代入すれば良いのでは?
my $mailto= $to;
みたいな。
あるいはフォームから取得した変数をそのまま使えば良いと思います。
ただしフォームで渡されてくるメールアドレスの正当生チェックや、文字コードの変換もしないとです。
またバッファオーバーフローやクロスサイトスクリプティング、コマンドインジェクションなどへの対策も必要です。
対策済みでしたら失礼。
コメントありがとうございます。
説明不足ですね;;
質問のコードはmailform.pl
下記のコードはmail.pl
#!/usr/bin/perl -w
use Encode qw(from_to encode);
use Net::SMTP;
use strict;
my $from = 'xxxx@xxxxx.jp';
my $mailto= 'xxxx@xxxxx.jp';
my $mailcc= 'xxxx@xxxxx.jp';
my $subject = 'ホームページからのお問い合わせ';
from_to($subject, 'shiftjis', 'iso-2022-jp');
encode('MIME-Header-ISO_2022_JP', $subject);
my $header = << "MAILHEADER";
From: $from
To: $mailto
CC: $mailcc
Subject: $subject
Mime-Version: 1.0
Content-Type: text/plain; charset = 'ISO-2022-JP"
Content-Trensfer-Encoding: 7bit
MAILHEADER
my $message = "テスト";
from_to($message, 'shiftjis', 'iso-2022-jp');
my $smtp = Net::SMTP->new('xxxx-xxxx.jp');
if ( !$smtp ) {
print "メールサーバーにアクセスできません!";
exit;
}
#メール送信
$smtp->mail($from);
$smtp->to($mailto);
$smtp->to($mailcc);
$smtp->data();
$smtp->datasend($header);
$smtp->datasend($message);
$smtp->dataend();
$smtp->quit;
mailform.plからmail.plへの受け渡しができないです
$to;
では同じコード内ではできることを確認しました・・
同じコード内でsubを使えればいいのですが、使いかたが・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでoutlook365が起動しません。
-
Perl 初心者 メール確認画面に...
-
VBAでsmtp認証をするには?
-
プロキシ経由でjavamailを使っ...
-
Perl メール 文字化け
-
「デバイスは PRN を初期化でき...
-
ユーザー定義関数に#NAME?が返...
-
モジュールとクラスの違いって...
-
Excel VBAでリンク切れをチェッ...
-
VBSがコンパイルエラーになりま...
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォーム...
-
モジュールの最大数はいくつな...
-
VHDLにおける「generic」について
-
Excel VBA 『Call』で呼び出す...
-
別シートに罫線がひけない
-
モジュールとサブルーチン
-
Excel VBAで、ユーザーフォー...
-
初心者です。Perlではどんな時...
-
印刷後メッセージボックスを表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでoutlook365が起動しません。
-
プロキシ経由でjavamailを使っ...
-
Net::SMTPでメールを送信したい...
-
VBScriptで、メールの送信をし...
-
C#のメール送信時のエラーについて
-
CDO.Messageを使ったVBScript
-
VBAでsmtp認証をするには?
-
Perl メール 文字化け
-
Exchangeを使用したメール送信...
-
送信先のメールアドレスが存在...
-
BASP21使用のメール送信でコマ...
-
【C言語】メールを送信するプロ...
-
Perl メールフォーム複数のアド...
-
フォームメールを外人に送る方...
-
CGI 実行後に HTML でフォーム...
-
フォームメール、時刻を設定し...
-
perl 自動返信メールプログラム...
-
フォーム経由で送られるURLつき...
-
自動返信について
-
foreachでのメール一斉送信処理...
おすすめ情報