お問い合わせフォームを設置する
お問い合わせフォームを設置してみましょう。
CGIが実行できるレンタルサーバーで動いていることが条件です。
今回紹介するのは、件名とメールアドレスとメッセージを送信できるシンプルなメールフォームです。
お問い合わせフォームのHTMLとお問い合わせフォームのCGIを設定することで、動きます
お問い合わせフォームのHTML
お問い合わせフォームのHTMLです。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(function() {
$('.mail-form button').on('click', function () {
var form_values = $('.mail-form form').serialize();
$.post(
"/mail.cgi",
form_values,
function (data) {
if (data.success) {
$('.mail-form').html('<div class="mail-form-success">メッセージを受け付けました。送信ありがとうございます。</div>');
}
else {
// エラーメッセージ
var errors = data.errors;
$('.mail-form-errors').empty();
for (var i = 0; i < errors.length; i++) {
var error = errors[i];
var li = $('<li></li>');
li.text(error);
$('.mail-form-errors').append(li);
}
}
},
"json"
);
});
});
</script>
<h2>お問合せフォーム</h2>
<div class="mail-form">
<ul class="mail-form-errors">
</ul>
<form>
<label>
<div class="mail-form-title">
名前:
</div>
<div class="mail-form-body">
<input type="text" size=50 name="name"><br>
</div>
</label>
<label>
<div class="mail-form-title">
メールアドレス:
</div>
<div class="mail-form-body">
<input type="text" size=50 name="email">
</div>
</label>
<label>
<div class="mail-form-title">
メッセージ:
</div>
<div class="mail-form-body">
<textarea name="message"></textarea>
</div>
</label>
<div>
<button type="button">メッセージを送信</button>
</div>
</form>
</div>
これを、以下のファイル名で、配置してください。
templates/mail.html
お問い合わせフォームのCGI
お問い合わせフォームのCGIです。
「$mailto」の部分に、送信先のメールアドレスを指定してください。
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use CGI;
use JSON::PP 'encode_json';
use MIME::Lite;
use Encode 'decode', 'encode';
my $q = CGI->new;
# Mail to
my $mailto = 'info@foo.example';
# Mail title
my $subject = 'サイトにメールが届いています';
# Errors
my @errors;
# Name
my $name = $q->param('name');
$name = decode('UTF-8', $name);
unless (length $name) {
push @errors, "名前を指定してください。";
}
# Email
my $email = $q->param('email');
$email = decode('UTF-8', $email);
unless (length $email && $email =~ /\@/) {
push @errors, "Eメールアドレスを正しく入力してください。";
}
# Message
my $message = $q->param('message');
$message = decode('UTF-8', $message);
unless (length $message) {
push @errors, "メッセージを指定してください。";
}
# Response
my $res = <<"EOS";
Content-type: application/json;
EOS
my $res_data = {};
unless (@errors) {
# Mail body
my $mail_body = <<"EOS";
Name: $name
Email: $email
Message: $message
EOS
# Send mail
my $msg = MIME::Lite->new(
From => $mailto,
To => $mailto,
Subject => encode('MIME-Header', $subject),
Type => 'multipart/mixed'
);
$msg->attach(
Type => 'TEXT',
Data => encode('UTF-8', $mail_body),
);
unless ($msg->send) {
push @errors, "メールの送信に失敗しました。";
}
}
if (@errors) {
$res_data->{success} = 0;
$res_data->{errors} = \@errors;
}
else {
$res_data->{success} = 1;
}
# JSON response
my $res_json = encode_json($res_data);
$res .= "$res_json\n";
# Print response
print $res;
これを、以下のファイル名で、配置してください。
templates/static/mail.cgi
改行コードは「LF」で保存してください。
パーミッションは以下のコマンドで、「755」に変更してください。
chmod 755 templates/static/mail.cgi
Gitを使う場合以外で、公開サーバーに配置する場合は、公開サーバー上でも、改行コードをLFに、パーミッションを755に設定する必要があります。
Perl入門ゼミの「メールフォーム」も参考にしてください。
