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

ジャパンのホームページ


[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. 最新のGoogle News(グーグルニュース)日本版のRSSが取得できるURL (1 PV)
  2. グーグルニュース(Google News)のRSS/atomが取得できない (1 PV)

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

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (2602 PV)
  2. Google News (グーグルニュース)日本版 (804 PV)
  3. Tumblr(タンブラー)のダッシュボードからおすすめ投稿を消す(非表示にする)方法 (402 PV)
  4. 最新のGoogle News(グーグルニュース)日本版のRSSが取得できるURL (402 PV)
  5. 有力将棋系ユーチューバーのショウヤンさんが将棋ウォーズで「ソフト指し」を告白し衝撃走る (401 PV)
  6. [将棋]角換わり▲4五桂速攻(△6五桂速攻) #佐藤天彦名人 #三浦弘行九段 (225 PV)
  7. グーグルニュース(Google News)日本版が表示できるURL (176 PV)
  8. USTREAM(ユーストリーム) 日本語版 無料のライブ映像配信サービス (164 PV)
  9. ウェブページを1回だけリロード(再表示)する方法 (162 PV)
  10. [Perl]UTF-8でエンコードされた文字列の文字数を取得するコード (154 PV)

アクセス統計

ディレクトリ

関連サイト