
メールフォームで
ホームページの問い合わせをクリックすると下記のコードでフォームページに飛びます。
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlのプログラミング 部分入れ...
-
Perlでファイルの末尾から指定...
-
テキストファイルで提出とは?
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでoutlook365が起動しません。
-
BASP21使用のメール送信でコマ...
-
VBScriptで、メールの送信をし...
-
プロキシ経由でjavamailを使っ...
-
Exchangeを使用したメール送信...
-
javamailでメール送信ができません
-
さくらインターネットでの添付...
-
Perl メール 文字化け
-
メールの送信について
-
CDO.Messageを使ったVBScript
-
sendmailでメール送信
-
Perl メールフォーム複数のアド...
-
VBAでsmtp認証をするには?
-
メールを送るスクリプトのテス...
-
【C言語】メールを送信するプロ...
-
Perl 初心者 メール確認画面に...
-
C#のメール送信でエラーが出る...
-
Perl初心者です。
-
Perl メール 勉強
-
Net::SMTPでメールを送信したい...
おすすめ情報