カスタマイズ例について説明します。
初期状態では、index.phpにブラウザでアクセスするとフォーム画面が表示されますが、このファイル名を変更することができます。
例えば、inquiry.php というファイル名でフォームを運用したい場合は、単にファイルをリネームするだけです。
それだけで、inquiry.php でフォームが動作します。
※entry.html, confirm.html, complete.htmlもリネームできますが、その場合はconfig.iniの設定変更が必要です。
Webサーバー内のSendmailプログラムからではなく、他のメールサービスや自社のメールサーバーを経由してメールを送信する方法について説明します。
ここでは、Gmailを利用してメールを送信します。
※Gmailのメールアドレスは事前に取得しておいてください。
SMTP送信機能を利用するには、config.ini の [smtp]セクションに設定を追記します。
初期状態では、[smtp]セクション自体がコメントアウトされて無効になっています。
「認証なし」、「SMTP認証」、「POP Before SMTP」の認証方法の違いにより設定する項目が異なります。
ここでは、Gmailサービスを利用して、SMTP認証を設定する例を紹介します。
例:
;;;=========================== ;;; smtp セクション ※SMTP認証の設定例 ;;; SMTPサーバーを指定してメールを送信する場合に使用します。 [smtp] ;; SMTP_AUTH:SMTP認証 ;; プロトコル protocol = SMTP_AUTH ;; ホスト名 host = ssl://smtp.gmail.com ;; ポート番号 port = 465 ;; ユーザー名 user = memailform@gmail.com ;; パスワード password = yourpassword
※ユーザー名・パスワードはご自身のものを指定してください。
※利用サービスによってホスト名やポート番号の設定値が異なります。
SMTP送信機能を利用するメリットとして、スパムと判定されにくいということと、sendmailプログラムを持たないWebサーバーからでもメールを送信できるという利点があります。
同じname属性のcheckboxを複数用意する方法について説明します。
入力画面(entry.html)では、name属性に "[]"(角カッコ)を付けます。
例:
<input type="checkbox" id="pamphlet0" name="pamphlet[]" value="会社案内を希望する"><label for="pamphlet0">会社案内を希望</label> <input type="checkbox" id="pamphlet1" name="pamphlet[]" value="商品案内を希望する"><label for="pamphlet1">商品案内を希望</label>
※ この例では、name属性に "pamphlet[]" と指定しています。
item.ini で該当項目のセクションにmultipleを指定します。
;; 資料請求 [pamphlet] type = checkbox label = "資料請求" multiple = 1
このように指定すると、確認画面やメール本文では選択された値を ", "(半角カンマ+半角スペース)で連結して表示します。
会社案内を希望する, 商品案内を希望する
複数項目選択時の連結文字列を変更するには、config.iniの[checkbox]セクションのdelimiter項目を変更します。
複数項目の連結に改行文字列を指定する例:
;;; checkbox セクション [checkbox] delimiter = " "
selectタイプ(プルダウンメニュー)で複数項目を選択する方法について説明します。
入力画面(entry.html)では、name属性に "[]"(角カッコ)を付けます。
multiple="multiple" 属性も追加します。
例:
<select name="address[]" multiple="multiple">
※ この例では、name属性に "address[]" と指定しています。multiple属性も追加しています。
item.ini で該当項目のセクションにmultipleを指定します。
;; 都道府県 [address] type = select label = "都道府県" multiple = 1
このように指定すると、確認画面やメール本文では選択された値を ", "(半角カンマ+半角スペース)で連結して表示します。
栃木県, 東京都, 和歌山県
複数項目選択時の連結文字列を変更するには、config.iniの[select]セクションのdelimiter項目を変更します。
複数項目の連結に改行文字列を指定する例:
;;; select セクション [select] delimiter = " "
php 拡張子のテンプレートファイルを用意することで、テンプレート内でPHPを実行できます。
拡張子がphp以外のテンプレートファイルでは、PHPスクリプトの記述があってもPHPは実行されません。
PHPを実行するためには、php拡張子のテンプレートファイルを用意すると同時に、config.iniの[step]セクションの設定を実際のファイル名に変更します。
;;; step セクション [step] ;; 入力画面で使用するテンプレートファイル entry = entry.php ;; 確認画面で使用するテンプレートファイルを指定 confirm = confirm.php ;; 送信画面(送信完了後)で使用するテンプレートファイルを指定 send = send.php ;; エラー用画面のテンプレートファイルを指定 error = me_mailform/view/error.php
これは、各テンプレートファイルの拡張子をphpに変更した例です。
※ index.phpと同じディレクトリにあればファイル名だけを指定します。
※ なお、テンプレートファイルは、viewディレクトリに移動すると直アクセスを禁止できます。(viewディレクトリは .htaccessの指定によりブラウザなどでアクセス出来ないようにしています。)
メール本文と同様にメールの件名を入力値で置換することができます。
管理者宛と自動応答メールの件名は、それぞれ config.ini の"subject"と"responder_subject"で指定します。
次のように "subject" に "{name}" のように波括弧で項目名を指定すると、その部分がフォームの入力値に置き換えられます。
;; 件名 subject = "{name}様からお問い合わせがありました"
※ 件名を置換できるタイプは "text, select, radio, checkbox, hidden, email" の6種類です。
フォームにemailタイプの項目がある場合、その入力値を管理者宛メールの送信元に指定できます。
次のように config.ini の from_item にemailタイプの項目名を指定します。
;; フォームの項目名を指定すると、その項目の入力値を送信元メールアドレスとしてメールを送信します from_item = email
このようにすると、メールの送信元がフォームの入力値になるため、届いたメールにそのまま返信できます。
送信元表示名も次のように項目名を指定すると、その入力値が表示名となってメールが送信されます。
;; フォームの項目名を指定すると、その項目の入力値を送信元表示名としてメールを送信します from_name_item = name
※ SMTP送信機能を利用した場合は、ここで指定した値が無効になる場合があります。
フォームの入力値が妥当でない場合に表示するエラーメッセージを変更できます。
config.ini の [message] セクションでエラーの種別毎にメッセージを指定できます。
例:
[message] ;; エラーメッセージID ;; 入力画面でエラー発生時にだけ表示したい見出しの要素名を指定します。 ;; エラーがない場合は、入力画面ではこのIDの要素を削除します。 error_message_id = error_message ;; 選択項目の未選択エラーメッセージ ;; selectタイプ、radioタイプの必須項目エラーが発生した場合のメッセージを指定します。 required_option = "{label}を選択してください。" ;; チェック項目の未チェックエラーメッセージ ;; checkboxタイプの必須項目エラーが発生した場合のメッセージを指定します。 required_check = "{label}にチェックを入れてください。" ;; 入力項目の未選択エラーメッセージ ;; textタイプ、passwordタイプ、textareaタイプで必須項目エラーが発生した場合のメッセージを指定します。 required = "{label}を入力してください。" ;; 最大文字数エラーが発生した場合のメッセージを指定します。 maxlength = "{label}は{maxlength} 文字以内で入力してください。" ;; メールアドレス書式エラーが発生した場合のメッセージを指定します email = "正しい{label}を入力してください。" ;; CAPTCHA(画像認証)に失敗した場合のメッセージを指定します captcha = "{label}に失敗しました。" ;; リファラーエラー referer = "リファラーを確認できません。" ;; メール送信失敗 send = "メールの送信に失敗しました。" ;; 半角数字以外の文字が入力された場合のメッセージを指定します。 numeric = "{label}は半角数字を入力してください。" ;; 電話番号書式エラーが発生した場合のメッセージを指定します phone = "{label}は数字とハイフンで入力してください。" ;; 郵便番号書式エラーが発生した場合のメッセージを指定します postal = "{label}は3桁と4桁の数字をハイフンで区切って入力してください。" ;; 入力値が異なる場合のメッセージを指定します equal_to = "{label}と{equal_to_label}は同じ内容を入力してください。"
このサンプルのように、{label} を指定するとその項目の表示名(item.iniのlabel項目)と置換できます。
"email" と "email_retype" というフォーム項目を用意します。
item.ini 内の "email_retype" の設定で、equal_to = email を指定します。
item.ini の設定例は以下です。
;; E-mailアドレス [email] type = email label = "E-mailアドレス" required = 1 ;; E-mailアドレス再入力 [email_retype] type = email label = "E-mailアドレス再入力" required = 1 equal_to = email
設定ファイル・ログファイルは通常は /me_mailform/data/ に配置されます。
これらのディレクトリは .htaccess ファイルにより外部から参照されることを防いでおりますが、.htaccess が無効になっているサーバも存在します。
そのような場合に、設定ファイルやログファイルを外部から参照されないようにするためには、/data/ ディレクトリの配置を変更します。
手順1:/data/ ディレクトリをドキュメントルート外の任意の位置に配置する。
例:/data/ を /home/user/data/ に移動する。
手順2:DATA_ROOT を設定する。
define.php ファイル(/me_mailform/define.php)に /data/ ディレクトリのパスを設定する。
設定前:(11行目付近)
//define('DATA_ROOT', '/full/path/to/data');
設定後:
define('DATA_ROOT', '/home/user/data');
※ 先頭のスラッシュ2つを削除して、「'/full/path/to/data'」内を書き換えます。
※ data ディレクトリの最後のスラッシュは不要です。
付属サンプルの文字コードは UTF-8 が使われています。ここでは Shift-JIS に変更する例について説明します。
入力画面、確認画面、送信完了画面、エラー画面のHTMLファイルの文字コードを Shift-JIS に変更します。
config.ini で [global] セクションの char_code を次のように指定します。
char_code = SJIS-win
設定ファイル(config.ini, item.ini)やメール本文ファイル(body.txt)は UTF-8 が使われていますが、これらの文字コードは変更しないでください。
初期設定では、送信されるメールの文字セットは ISO-2022-JP で、エンコードは 7bit が指定されています。
初期設定:
[mail] charset = ISO-2022-JP encoding = 7bit
ここでは文字セットを UTF-8 に、エンコードは base64 に変更します。
変更例:
[mail] charset = UTF-8 encoding = base64
文字セットを UTF-8 に変更することで半角カナや多言語(韓国語・中国語など)に対応することができます。ただし、古い携帯電話では UTF-8 をサポートしていないものもありますので、ご注意ください。
※ バージョン0.3.2で追加された機能です。
ブラウザの戻るボタンで入力画面に戻った際の入力内容の保持状態や、「ページの有効期限切れ」や更新ボタンのクリックを促すダイアログの有無に影響する設定を変更できます。
config.ini の [global] セクションの session.cache_limiter でその設定を行います。
;;; global セクション [global] ;; キャッシュ制御方法 ;; nocache, private, private_no_expire, public のいずれかを指定できる。 ;; この設定値は、php.ini の session.cache_limiter の値を上書きます。 session.cache_limiter = private_no_expire
この設定値は、PHPのsession_cache_limiter関数の引数として使われます。設定値毎の挙動については、こちらのマニュアルをご確認ください。
http://php.net/manual/ja/function.session-cache-limiter.php
※バージョン0.3.3で追加された機能です。
付属のメールフォームでは、管理者宛だけでなく、フォーム送信者宛にも自動応答(自動返信)メールが送信される設定になっています。 その自動応答メールを停止したい場合は、config.ini の [mail] セクションのresponder_to項目をコメントアウトします。
;; フォームの項目名を指定すると、その項目の入力値を宛先としてメールを送信します ;responder_to = email