[Perl]メールフォームCGIの作り方
オンラインショップの商品が注文された際に顧客に注文内容の確認メールを送信したり、掲示板にコメントが書き込まれた際に管理人宛てに通知メールを送信したりするには、フォームで入力された項目の内容をCGIからメールとして送信する必要が あります。
一般的なレンタルサーバーでCGIからメールを送信する場合の基本的な処理手順は次のようになります。
1.フォームから入力された各項目の値をパラメータから取得
2.subject(件名)をMIME-Base64形式に変換
3.メッセージを作成
4.メール送信する文字列の文字コードをJISに変換
5.sendmailを使用してメールを送信
下記のCGIスクリプト(UTF-8)はレンタルサーバー等で利用可能なsendmailを使用してフォームから入力された、Subject、宛先メールアドレス、差出人、本文を使用してメールを送信するサンプルプログラムです。
--- mailform.html (入力フォーム) ---
<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="sendmail.cgi"> <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>
--- sendmail.cgi (メール送信CGI) ---
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use Encode;
my $cgi = CGI->new();
# パラメータからフォームの入力値を取得
my $subject = $cgi->param('subject');
my $to = $cgi->param('to');
my $from = $cgi->param('from');
my $body = $cgi->param('body');
# subject(件名)をMIME-Base64形式に変換
$subject = Encode::encode('MIME-Header-ISO_2022_JP', $subject);
# メッセージを作成
my $message = <<"END_MESSAGE";
From: $from
To: $to
Subject: $subject
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
$body
END_MESSAGE
# メール送信する文字列の文字コードをJISに変換
Encode::from_to($message, 'utf8', '7bit-jis');
# sendmailを使用してメールを送信
my $sendmail_path = '/usr/sbin/sendmail'; # sendmail path
open my $mailh, "| $sendmail_path -t -oi $to";
print {$mailh} $message;
close $mailh;
# 送信終了を表示
my $html = <<"END_HTML";
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>送信終了</title>
</head>
<body>
<p><big>送信終了</strong></big></p>
</body>
</html>
END_HTML
print "Content-Type: text/html\n\n", $html;
なお、フォームからのパラメータの受け取りにはCGIモジュールを、メール本文の文字コードの変換やsubject(件名)のMIME-Base64形式への変換にはPerl 5.8以降では標準モジュールなっているEncodeモジュールを使用しています。
また、このサンプルでは、処理手順をわかりやすくするために、入力チェックなどの実際に運用する場合に必要な 処理を行ってませんが、入力チェック処理も含まれたより実用的なシンプルな メールフォームCGIの無料配布(ライセンスはGPL)も行っていますので、よろしければご活用ください。
[147] Posted by kagahiro at 2005/03/31 01:12:52
オープン | 0 point | Link (14) | Trackback (0) | Comment (0)
オープン | 0 point | Link (14) | Trackback (0) | Comment (0)
[Perl]メールフォームCGIの作り方 関連リンク
| CGI | |
| CGI(Common Gateway Interface)とは、Webサーバーがプログラムを起動する方法(環境変数の名前や値)を定めた仕様のことである。 | |
| CGIで利用できる環境変数を調べるには | |
| CGIを実行するサーバーによっては固有の環境変数もあるので、まず自分のCGIを実行するサーバーでどんな環境変数が利用できるかを調べる... | |
| CGIから利用できるPerlモジュールを調べるには | |
| Perlのモジュールを利用したCGIを使用するためには、CGIを実行するサーバーでどんなモジュールが利用できるかを調べて... | |
| Perl | |
| Perlとは、Larry Wall氏によって開発された、テキストの検索や抽出やレポート作成に適した、C言語に似た表記法のスクリプトプログラミング言語... | |
| 無料メールフォームCGIのダウンロード | |
| Perlで書かれたメールフォームCGIをオープンソースライセンス(GPLv2)で公開しました。メールフォームCGIはWebページのフォームに入力された内容をメールで通知するスクリプトです。オープンソース... |
|
| メールフォームCGI、Q&A CGI、ブックマークCGIのバージョンアップ | |
| メールフォームCGI、Q&A CGI、ブックマークCGIをそれぞれバージョンアップしました。HTML::Templateを使用してUIの部分をできるだけプログラムから取り除き、テンプレートファイルで記述するよう... |
|
| Sendmail(センドメール) | |
| sendmail(センドメール)とは、Eric Allman氏によって開発された電子メールサーバソフトウェア(MTA)のことで、ユーザが送信したメールを受け取って、他のサーバと連携してバケツリレー式に目的地... |
|
| sendmail [書籍] | |
| sendmailシステム管理難解といわれるsendmailの設定・管理方法を初心者にもわかるように解説されている書籍。各種コマンドやオプションの意味、ルールセット、ユーザデータベースなどのトピックも... |
|
| 各種メールフォーム(入力フォーム)を格安で作成します | |
| レンタルサーバーで運営するホームページに設置するお問い合わせフォームや会員登録フォーム、注文フォームなど、確認画面、確認メール送信機能を搭載した各種メールフォーム(CGI)を格安で... |
|
| レンタルサーバー「heteml(ヘテムル)」にメールフォーム簡単設置機能 | |
| paperboy&co.が提供している大容量・高機能レンタルサーバー「heteml(ヘテムル)」に、サイト訪問者からの感想やお問い合わせ、注文の受付など様々な用途に利用できるメールフォームを簡単に設置できる機能が導入され... |
|
| メールフォーム(有料版)のサンプル | |
| 有料版メールフォーム(入力フォーム)の実際に動くサンプルを作成しました。お問い合わせフォームのサンプル会員登録フォームのサンプル注文フォームのサンプルメールフォーム... |
|
| BlogMail | |
| BlogMailは、ブログ訪問者からのメールを簡単に受け取れるように出来る無料のブログパーツ。シンプル版とブログパーツ版があり、ブログパーツ版は掲載用コードを設置するだけで使える。BlogMail フリーで使えるメール... | |
| PHPメールフォームのサンプルスクリプト | |
| PHPの開発環境でプログラムからメールを送信できるかチェックするために作成した、ごく簡単なメールフォームのサンプルスクリプト(プログラム)です。mailmform.phpを実行すると入力フォームが表示され。送信ボタン... | |
| メールフォーム(mailform)とは | |
| メールフォーム(mailform)とは、ウェブサイトに設置された入力フォームからユーザーが入力した情報を、サーバー側でPerlやPHPなどで記述されたプログラムで処理し電子メールとして送信するもので、ユーザーに入力し... | |
[Perl]メールフォームCGIの作り方 トラックバック
トラックバックURL :
[Perl]メールフォームCGIの作り方へのコメント
アクセスランキング
今日のアクセスランキング TOP 10
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (6 PV)
- 2NN 2ちゃんねるニュース速報+ナビ (3 PV)
- Google Finance(グーグルファイナンス)- リアルタイム株価情報、金融ニュース、日本株 (2 PV)
- 10baggerの配布は終了しました (2 PV)
- さきゅばす - ニコニコ動画コメント付き動画保存ソフト (2 PV)
- FC2WiFI (2 PV)
- 裁量トレードを半自動化する無料のMT5向け裁量トレード支援ツール(裁量補助EA)「PositionKeeper MT5」 #FX (2 PV)
- ニコニコ動画は本気でMADを削除する気があるのだろうか (2 PV)
- 人気ナンピンマーチンEA「NPNM_v3」向けサンプルセットファイル (1 PV)
- RIA(Rich Internet Application、リッチインターネットアプリケーション) (1 PV)
今月のアクセスランキング TOP 10
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (67 PV)
- 2NN 2ちゃんねるニュース速報+ナビ (14 PV)
- Google Finance(グーグルファイナンス)- リアルタイム株価情報、金融ニュース、日本株 (10 PV)
- 裁量トレードを半自動化する無料のMT5向け裁量トレード支援ツール(裁量補助EA)「PositionKeeper MT5」 #FX (7 PV)
- SQLiteのSELECT文で上位 (TOP) n件のデータを取得する (6 PV)
- StartPage(スタートページ) - 匿名検索エンジン (5 PV)
- FC2まとめ (5 PV)
- 人気ナンピンマーチンEA「NPNM_v3」向けサンプルセットファイル (5 PV)
- YouTube(ユーチューブ)日本版 - 動画共有、ライブ配信 (5 PV)
- 日経平均株価(にっけいへいきんかぶか) (4 PV)
アクセス統計
ディレクトリ
関連サイト