こんばんは、トウコ(@at_tokotoko)です。
今回も最近やった案件のお話です。
お問い合わせフォームにPostMailを使う
最近Wordpressで作っているサイトも多いですし、メールフォームのサービスも便利なの色々あるんで、あんまりないかなと思うのですが、簡単にサクッと作りたいならCGIでのメールフォームで作るのもいいですよね。
CGIのメールフォームといえば昔から有名なのがPoasMailさんです。
500 Internal Server Errorが出てムキー!ってなってた
でもCGIって結構凡ミスやらかしてなぜか表示できないということも多かった記憶が…。
今回もなぜか最新版を入れようとするとInternal Server Errorが出て表示されないという負のループに陥って大変でした。
「End of script output before headers: 」って出るんですけど…。
エラーが出たらパスを疑え
Cgiファイルの最初に書いてあるパスをまず疑いました。
perlのパスとsendmailのパスですね。
どっちもサーバの仕様書を確認してちゃんと入力してもエラーは消えず。
エラーが出たらパーミッションを疑え
パーミッション!
絶対疑えと言われるやつ。cgiファイルのパーミッションはもちろん、格納しているフォルダも疑って変えてみたけど反映されーず。
エラーが出たらテキストエンコーディングを疑え←これだった!
あとはもうエンコーディングぐらいしか思い浮かびません。
Macだということもあるしこの可能性はまあ高そうではあるかな…と思い変えてみました。
すると、改行コードが「CRLF」になっているのを発見。
もしかすると!?と「LF」にしてアップロードしてみたらできました!!
わーい!大変だった〜!!
返信メールの内容をカスタマイズする
脱線しましたが本番はここから。
返信メールの雛形であるreply.txt
を見ると送信内容が!message!
で一気に表示するようになっているので、たとえば返信メールの最初に入力してもらった項目で「○○様メールありがとうございます」とかできないんですよね。
今回はこれをできるようにします。
検索してみると過去これに挑戦された方がいらっしゃって、それに対して作者の方が丁寧に返信なさっていたのを発見。
最新版でもできることがわかったのでこちらにご紹介します。
postmail.cgi
をカスタマイズします。
320行目付近
# 本文テンプレ内の変数を置き換え
$mail =~ s/!message!/$mbody/;
# 返信テンプレ内の変数を置き換え
$reply =~ s/!message!/$mbody/ if ($cf{auto_res});
の次の行に
# 改造のため追加 ■■
$mail =~ s/<!--(.*?)-->.*?<!--\1-->\n?//sg;
$reply =~ s/<!--(.*?)-->.*?<!--\1-->\n?//sg if ($cf{auto_res});
# 改造のため追加 ここまで■■
を挿入。
これと
308行目付近に
# 本文内容
my $tmp;
if ($$in{$_} =~ /\n/) {
$tmp = "$key_name = \n$$in{$_}\n";
} else {
$tmp = "$key_name = $$in{$_}\n";
}
$mbody .= $tmp;
の次の行に
# 改造のため追加 ■■
if($key_name ne 'message') {
$mail =~ s/!$key_name!/$$in{$_}/;
$reply =~ s/!$key_name!/$$in{$_}/ if ($cf{auto_res});
if($$in{$_}) {
$mail =~ s/<!--$key_name-->//g;
$reply =~ s/<!--$key_name-->//g if ($cf{auto_res});
} else {
$mail =~ s/<!--$key_name-->.*?<!--$key_name-->\n?//sg;
$reply =~ s/<!--$key_name-->.*?<!--$key_name-->\n?//sg if ($cf{auto_res});
}
}
# 改造のため追加 ここまで■■
を挿入する。
これでOKです。
あとはreply.txt
とかmail.txt
に、メールフォームで作成していた項目<input type="text" name="email">
のname
の部分を!!
で括ります。
!お名前!
みたいな感じで。
これで入力項目ごとにバラバラにできるようになりました。
あとは返信メールを好きにカスタマイズするだけですね!
PostMailを使う案件の時にお役立てください!
コメント