[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. [食べ物]七草粥(ななくさがゆ) (5 PV)
  2. 「CASH(キャッシュ)」アイテム(ブランド品やガジェット)の写真を撮れば審査なしで現金化できるサービス (3 PV)
  3. Google News (グーグルニュース)日本版 (3 PV)
  4. フリーソフトウェア/オープンソースのタブー (3 PV)
  5. Sony、ハイエンドEマウントミラーレスカメラ「α9」(model ILCE-9)を発表 (2 PV)
  6. [将棋]竜王戦第三局は居飛車振り飛車の対抗型で丸山忠久九段が勝利 #竜王戦 (2 PV)
  7. 無料の動画ダウンロードツール「xVideoServiceThief」 (2 PV)
  8. YouTubeドラマまとめ ドラマ・映画 -VideoNavi- (1 PV)
  9. 米海軍の空母カールビンソンとロナルドレーガンが日本海から撤退 #北朝鮮問題 (1 PV)
  10. 世界最大のマストドンインスタンス「mstdn.jp」の管理者nullkal(ぬるかる)さんがドワンゴに入社 (1 PV)

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

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (3083 PV)
  2. Google News (グーグルニュース)日本版 (517 PV)
  3. Deep Learning (日本語翻訳版) - ディープラーニング(深層学習)に関する書籍の決定版 #機械学習 (337 PV)
  4. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (262 PV)
  5. [将棋]竜王戦第三局は居飛車振り飛車の対抗型で丸山忠久九段が勝利 #竜王戦 (259 PV)
  6. [食べ物]七草粥(ななくさがゆ) (250 PV)
  7. グーグルニュース日本語版が見れない (238 PV)
  8. フリーソフトウェア/オープンソースのタブー (208 PV)
  9. 「CASH(キャッシュ)」アイテム(ブランド品やガジェット)の写真を撮れば審査なしで現金化できるサービス (204 PV)
  10. 無料の動画ダウンロードツール「xVideoServiceThief」 (173 PV)

アクセス統計

ディレクトリ

関連サイト