[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)



kagahiroのホームページ


[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

  1. フリーソフトウェア/オープンソースのタブー (4 PV)
  2. [食べ物]七草粥(ななくさがゆ) (3 PV)
  3. [将棋]竜王戦第三局は居飛車振り飛車の対抗型で丸山忠久九段が勝利 #竜王戦 (3 PV)
  4. [将棋]NHKトーナメントで佐藤康光九段がなめプ角頭歩戦法で佐藤天彦名人を撃破 (2 PV)
  5. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (2 PV)
  6. Sony、ハイエンドEマウントミラーレスカメラ「α9」(model ILCE-9)を発表 (2 PV)
  7. FC2動画やYouTubeなどから無料動画(映画やドラマ、アニメ、音楽など)を探す方法 (2 PV)
  8. Dailymotion(デイリーモーション) - 動画共有サイト (2 PV)
  9. 「Mastodon-iOS」マルチインスタンス対応のiPhone用Mastodon(マストドン)アプリ (1 PV)
  10. 「マストドン(Mastodon)」ブームでカドカワの株価が上昇、さくらインターネットの株価は上がらず (1 PV)

今月のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (3982 PV)
  2. [将棋]中学生プロ棋士の藤井聡太四段がNHK杯1回戦で千田翔太六段に勝ちプロデビューから公式戦13連勝 (353 PV)
  3. ウェブページを1回だけリロード(再表示)する方法 (269 PV)
  4. 世界最大のマストドンインスタンス「mstdn.jp」の管理者nullkal(ぬるかる)さんがドワンゴに入社 (193 PV)
  5. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (191 PV)
  6. [将棋]竜王戦第三局は居飛車振り飛車の対抗型で丸山忠久九段が勝利 #竜王戦 (176 PV)
  7. フリーソフトウェア/オープンソースのタブー (172 PV)
  8. Sony、ハイエンドEマウントミラーレスカメラ「α9」(model ILCE-9)を発表 (163 PV)
  9. 将棋ウォーズスーパープレミアムプラン販売開始、香川愛生女流三段のボイスが選択可能 #将棋 (163 PV)
  10. [食べ物]七草粥(ななくさがゆ) (147 PV)

アクセス統計

ディレクトリ

関連サイト