![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
メールフォームで
ホームページの問い合わせをクリックすると下記のコードでフォームページに飛びます。
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で質問しましょう!
似たような質問が見つかりました
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP php ログイン 1 2022/11/01 00:24
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perl メールフォーム複数のアド...
-
Net::SMTPでメールを送信したい...
-
foreachでのメール一斉送信処理...
-
VBAでoutlook365が起動しません。
-
mailコマンドで送信元を指定す...
-
例外処理のフローチャートの記...
-
'Range'メソッドは失敗しました
-
本当にPublicな変数(配列で)
-
標準モジュールを削除したい。(...
-
グラフのX,Y座標を取得したい
-
ユーザー定義関数に#NAME?が返...
-
LCD ディスプレイを Raspberry ...
-
印刷後メッセージボックスを表...
-
pythonのプログラミングについ...
-
Excelで時刻になったら知らせて...
-
偶数/奇数の判定
-
"JScript"が見つかりません!
-
実行中のcpan processを終了さ...
-
Form間の値の渡し方
-
msgboxの表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでoutlook365が起動しません。
-
c#で 簡単なメール(添付ファ...
-
Perl メールフォーム複数のアド...
-
CDO.Messageを使ったVBScript
-
Enterキーを押しても送信しない...
-
【C言語】メールを送信するプロ...
-
送信先のメールアドレスが存在...
-
プロキシ経由でjavamailを使っ...
-
VBScriptで、メールの送信をし...
-
perl 自動返信メールプログラム...
-
C#のメール送信時のエラーについて
-
空メールシステムについて
-
フォーム経由で送られるURLつき...
-
フォームメール、時刻を設定し...
-
Net::SMTPでメールを送信したい...
-
sendmailでメール送信
-
C言語のプログラム内でトリガを...
-
VBAでsmtp認証をするには?
-
セッションIDの受信・・(初心者...
-
リンクをクリックするだけでC...
おすすめ情報