カスタマイズ

カスタマイズ事例を紹介します。

フォーム画面・テンプレート関連
メール関連
CSV・ログ
文字コード

contactディレクトリの名前を変更する

アーカイブファイルに含まれる contact ディレクトリの名前は自由に変更することができます。
変更作業は、ディレクトリ名を変更するだけで完了します。
設定ファイル等を変更する必要はありませんが、テンプレートファイル内にディレクトリ名に依存した方法でリソースの指定をされている場合は、再調整が必要です。

index.phpのファイル名を変更する

初期状態では、index.php にブラウザでアクセスするとフォーム画面が表示されます。このファイル名を変更することができます。
例えば、inquiry.php というファイル名でフォームを運用したい場合は、次を行います。

  • index.php を inquiry.php にファイル名を変更する。
  • テンプレートファイル内の form の action 属性や CAPTCHA 画像の src 属性の index.php を inquiry.php に変更する。

checkboxで複数選択を可能にする

同じname属性のcheckboxを複数用意する方法について説明します。
入力画面(entry.html)では、name属性に "[]"(角カッコ)を付けます。
例:

<label><input type="checkbox" name="use[]" value="お問い合わせフォーム"> お問い合わせフォーム</label>
<label><input type="checkbox" name="use[]" value="アンケートフォーム"> アンケートフォーム</label>
<label><input type="checkbox" name="use[]" value="求人募集フォーム"> 求人募集フォーム</label>

※ この例では、name属性に "use[]" と指定しています。

item.ini で該当項目のセクションにmultipleを指定します。

;; ご利用用途
[use]
type = checkbox
label = "ご利用用途"
multiple = 1

このように指定すると、確認画面やメール本文では選択された値を ", "(半角カンマ+半角スペース)で連結して表示します。

お問い合わせフォーム, アンケートフォーム

複数項目選択時の連結文字列を変更するには、config.iniの [checkbox] セクションの delimiter 項目を変更します。
複数項目の連結に改行文字列を指定する例:

;;; checkbox セクション
[checkbox]
delimiter = "
"

selectで複数選択を可能にする

selectタイプ(プルダウンメニュー)で複数項目を選択する方法について説明します。
入力画面(entry.html)では、name属性に "[]"(角カッコ)を付けます。
multiple="multiple" 属性も追加します。 例:

<select name="pref[]" multiple="multiple">

※ この例では、name属性に "pref[]" と指定しています。multiple属性も追加しています。

item.ini で該当項目のセクションにmultipleを指定します。

;; 都道府県
[pref]
type = select
label = "都道府県"
multiple = 1

このように指定すると、確認画面やメール本文では選択された値を ", "(半角カンマ+半角スペース)で連結して表示します。

栃木県, 東京都, 和歌山県

複数項目選択時の連結文字列を変更するには、config.iniの[select]セクションのdelimiter項目を変更します。
複数項目の連結に改行文字列を指定する例:

;;; select セクション
[select]
delimiter = "
"

メールアドレスを再入力してもらい、入力値が同じかどうか確認する

"email" と "email_retype" というフォーム項目を用意します。
item.ini 内の "email_retype" の設定で、equal_to = email を指定します。
item.ini の設定例は以下です。

;; メールアドレス
[email]
type = email
label = "メールアドレス"
required = 1

;; メールアドレス再入力
[email_retype]
type = email
label = "メールアドレス再入力"
required = 1
equal_to = email

住所入力支援のinput要素を変更する

サンプルフォームの郵便番号と住所欄はそれぞれ1つにinput要素で構成されています。
郵便番号を3桁+4桁の入力ボックスに別けたり、住所を複数に別けることが可能です。
この変更を行うためには、memf.zipAddr() メソッドの引数を調整します。
メソッドの引数は次のようになっていて、郵便番号もしくは住所用input要素のname属性を指定します。

  memf.zipAddr('zip1', 'zip2', 'pref', 'city', 'town', 'st')

※このメソッドは郵便番号入力ボックスの onkeyup 属性などに指定します。
※このメソッドを利用するためには、jQuery と memf.js を読み込む必要があります。

zip1 は郵便番号用です。
zip2 は郵便番号欄を2つに別けた場合の下4桁用です。
pref は都道府県を出力します。
city は市区町村を出力します。
town は町域を出力します。
st は丁目番地を出力します。
4つ目(city)以降の引数を省略すると最後の要素に残りの情報が追加されます。

いくつかのカスタマイズ事例を紹介します。

郵便番号1つ、住所1つ(サンプルフォームと同じ)
郵便番号
住所

コード例:

〒<input type="text" name="ex1_zipcode" class="input-small" onkeyup="memf.zipAddr('ex1_zipcode', '', 'ex1_addr')">

<input type="text" name="ex1_addr" class="input-xxlarge">
郵便番号を2つに別ける
郵便番号 -
住所

コード例:

〒<input type="text" name="ex2_zip1" class="input-mini">
-<input type="text" name="ex2_zip2" class="input-mini" onkeyup="memf.zipAddr('ex2_zip1', 'ex2_zip2', 'ex2_addr')">

<input type="text" name="ex2_addr" class="input-xxlarge">
住所を4つに別ける

丁目番地を持つ郵便番号(事業所)の例: 1008798

郵便番号 -
住所
市区町村
町域
丁目番地

コード例:

〒<input type="text" name="ex3_zip1" class="input-mini">
-<input type="text" name="ex3_zip2" class="input-mini" onkeyup="memf.zipAddr('ex3_zip1', 'ex3_zip2', 'ex3_pref', 'ex3_city', 'ex3_town', 'ex3_st')">

<select name="ex3_pref">
  <option value="">--</option>
  <option value="北海道">北海道</option>
  <!-- 省略 -->
  <option value="沖縄県">沖縄県</option>
  <option value="海外/その他">海外/その他</option>
</select>
<input type="text" name="ex3_city" class="input-xxlarge" placeholder="ex3_city">
<input type="text" name="ex3_town" class="input-xxlarge" placeholder="ex3_town">
<input type="text" name="ex3_st" class="input-xxlarge" placeholder="ex3_st">

エラーメッセージを変更する

フォームの入力値が妥当でない場合に表示するエラーメッセージを変更できます。
message.ini (メッセージ設定) の [message] セクションでエラーの種別毎にメッセージを指定します。
message.iniの一部:

;; チェック項目の未チェックエラーメッセージ
;; checkboxタイプの必須項目エラーが発生した場合のメッセージを指定します。
msg_required_check = "{label}にチェックを入れてください。"

上記のように、{label} を指定するとその項目の表示名(item.iniのlabel項目)と置換できます。

message.ini ではエラーの種類毎にメッセージを指定します。
同じ種類のエラーでも特定のアイテムには専用のメッセージを表示したい場合は、item.ini に message.ini と同じ項目の設定を追加します。
次の例では、terms アイテムの必須項目エラーは専用のメッセージが表示されるようになります。

;; 利用規約
[terms]
type = checkbox
label = "利用規約"
required = 1
msg_required_check = "利用規約にご同意いただけない場合はご利用いただけません。"

テンプレート内でPHPを実行する

php 拡張子のテンプレートファイルを用意することで、テンプレート内でPHPを実行できます。
拡張子がphp以外のテンプレートファイルでは、PHPスクリプトの記述があってもPHPは実行されません。
PHPを実行するためには、php拡張子のテンプレートファイルを用意すると同時に、config.iniの [step] セクションの設定を実際のファイル名に変更します。

;;; step セクション
[step]
;; 入力画面で使用するテンプレートファイル
entry = entry.php

;; 確認画面で使用するテンプレートファイルを指定
confirm = confirm.php

;; 送信画面(送信完了後)で使用するテンプレートファイルを指定
send = send.php

;; エラー用画面のテンプレートファイルを指定
error = error.php

これは、各テンプレートファイルの拡張子をphpに変更した例です。

キャッシュ制御設定を変更する

ブラウザの戻るボタンで入力画面に戻った際の入力内容の保持状態や、「ページの有効期限切れ」や更新ボタンのクリックを促すダイアログの有無に影響する設定を変更できます。

config.ini の [global] セクションの session.cache_limiter でその設定を行います。

;;; global セクション
[global]

;; キャッシュ制御方法
;; 確認画面使用時のキャッシュ設定を行います。
;; nocache, private, private_no_expire, public のいずれかを指定できる。
;; この設定値は、php.ini の session.cache_limiter の値を上書きます。
;; 確認画面を使用しない場合はこの設定は無効です。その場合、PHPの初期設定状態では nocache として
;; 扱われます。
session.cache_limiter = private_no_expire

この設定値は、PHPのsession_cache_limiter関数の引数として使われます。設定値毎の挙動については、こちらのマニュアルをご確認ください。
http://php.net/manual/ja/function.session-cache-limiter.php

URLパラメータをフォームの初期値として受け取る

たとえば「お問い合わせ種別」のラジオボタンがある場合に、遷移元のリンクにURLパラメータをセットしてそれを受け取ることで初期選択値を変えることができます。

item.ini でURLパラメータを受け取りたいアイテムを次のように設定します。

[category]
type = radio
label = "お問い合わせ種別"
required = 1
get_param = c

フォームへのリンクにURLパラメータをセットします。
例: https://example.com/contact/index.php?c=products

リンクによって異なるURLパラメータをセットすることもできます。
例: https://example.com/contact/index.php?c=corporate

これらの場合 category アイテムでは、 get_param に設定した "c" パラメータを初期値として受け取ります。
※ここではラジオボタンの実装例を紹介しましたが、セレクトボックスなどでも同様に動作します。
※「お問い合わせ種別」以外にも、「申込日」や「注文商品名」と連携するといった活用方法があります。

SMTP送信機能を利用する

Webサーバー内のSendmailプログラムからではなく、他のメールサービスや自社のメールサーバーを経由してメールを送信する方法について説明します。 ここでは、Gmailを利用してメールを送信します。
※Gmailのメールアドレスは事前に取得しておいてください。
※Gmailサービスは状況によりログインをブロックされる場合があるため、Gmailでの運用は推奨致しません。1つの設定例としてご紹介します。

SMTP送信機能を利用するには、mail.ini の [smtp]セクションに設定を追記します。
初期状態では、[smtp]セクション自体がコメントアウトされて無効になっています。
「認証なし」、「SMTP認証」、「POP Before SMTP」の認証方法の違いにより設定する項目が異なります。
ここでは、Gmailサービスを利用して、SMTP認証を設定する例を紹介します。
GmailサービスでSMTP認証をして SMTPS(SMTP over SSL)で接続する例:

;;;===========================
;;; smtp セクション ※SMTP認証の設定例
;;; SMTPサーバーを指定してメールを送信する場合に使用します。
[smtp]
;; SMTP_AUTH:SMTP認証
;; プロトコル
protocol = SMTP_AUTH
;; ホスト名
host = ssl://smtp.gmail.com
;; ポート番号
port = 465
;; ユーザー名
user = ユーザー名@gmail.com
;; パスワード
password = パスワード

※ユーザー名・パスワードはご自身のものを指定してください。
※利用サービスによってホスト名やポート番号の設定値が異なります。
SMTP送信機能を利用すると、スパムと判定されにくいということと、sendmailプログラムを持たないWebサーバーからでもメールを送信できるという利点があります。
※SMTP認証で対応している認証方式は PLAIN のみとなります。
※SMTPS(SMTP over SSL)で接続する場合はホスト名の先頭に「ssl://」を指定します。
※ロリポップ!レンタルサーバーでも同様の設定で動作事例があります。

さくらのレンタルサーバーの例:

;;;===========================
;;; smtp セクション ※SMTP認証の設定例
;;; SMTPサーバーを指定してメールを送信する場合に使用します。
[smtp]
;; SMTP_AUTH:SMTP認証
;; プロトコル
protocol = SMTP_AUTH
;; ホスト名
host = your-smtpserver.example.com
;; ポート番号
port = 587
;; ユーザー名
user = ユーザー名@example.com
;; パスワード
password = パスワード

管理者宛メールの送信元メールアドレスに入力値を利用する

フォームにemailタイプの項目がある場合、その入力値を管理者宛メールの送信元に指定できます。
次のように mail.ini の from_item に email タイプの項目名を指定します。

;; フォームの項目名を指定すると、その項目の入力値を送信元メールアドレスとしてメールを送信します
from_item = email

このようにすると、メールの送信元がフォームの入力値になるため、届いたメールにそのまま返信できます。
送信元表示名も次のように項目名を指定すると、その入力値が表示名となってメールが送信されます。

;; フォームの項目名を指定すると、その項目の入力値を送信元表示名としてメールを送信します
from_name_item = name

※ SMTP送信機能を利用した場合は、ここで指定した値が無効になる場合があります。

自動返信メールを停止する

付属のメールフォームでは、管理者宛だけでなく、フォーム送信者宛にも自動返信(自動応答)メールが送信される設定になっています。
自動返信メールを停止したい場合は、mail.ini の [reply_mail] セクションのreply_to項目をコメントアウト(行頭にセミコロンを追加)します。

;; フォームの項目名を指定すると、その項目の入力値を宛先としてメールを送信します
;reply_to = email

送信先振り分け機能を利用する

送信先振り分け機能とは、ラジオボタンやセレクトボックスなどの入力フォームの選択内容に応じて管理者宛メールの宛先を変更する機能です。
問い合わせ用件に応じてそれぞれの担当者にメールが届くようにしたり、問い合わせ先として本社・営業所などを問い合わせ時に指定してもらうことが可能です。
ラジオボタンの選択内容に応じて送信先を振り分ける例を紹介します。
入力画面のラジオボタンの例:

<tr>
  <th>ご用件 <span class="label label-important">必須</span></th>
  <td>
    <div><label><input type="radio" name="purpose" value="お見積依頼">
        お見積依頼</label></div>
    <div><label><input type="radio" name="purpose" value="採用情報について">
        採用情報について</label></div>
    <div><label><input type="radio" name="purpose" value="その他お問い合わせ">
        その他お問い合わせ</label></div>
    <div id="purpose_error" class="alert alert-error">エラーメッセージ</div>
  </td>
</tr>

mail.ini の [sorting] セクションを次のように設定します。

[sorting]
;; 振り分けの元になるアイテム名を指定する
item_name = purpose

value_1 = "お見積依頼"
email_1 = sales@example.com, info@example.com

value_2 = "採用情報について"
email_2 = recruit@example.com

value_3 = "その他お問い合わせ"
email_3 = info@example.com

この設定の場合、「ご用件」で「お見積依頼」が選択された場合は、[sorting]セクションの value_X の値と比較します。
value_1 が一致すると email_1 のメールアドレスにメールが送信されます。
一致するものがない場合は、[mail] セクションの to 宛にメールが送信されます。

メール件名を入力値で置換する

メール本文と同様にメールの件名を入力値で置換することができます。
管理者宛と自動返信メールの件名は、それぞれ mail.ini の "subject" と "reply_subject" で指定します。
次のように "subject" に "{name}" のように波括弧で項目名を指定すると、その部分がフォームの入力値に置き換えられます。

;; 件名
subject = "{name}様からお問い合わせ"

※ 件名を置換できるタイプは "text, select, radio, checkbox, hidden, email" の6種類です。

通し番号発行機能を利用する

通し番号発行機能とは、メールフォーム利用時に受付番号や注文番号などの管理番号を発行して、メール本文や送信画面に表示するための機能です。
この機能を利用するには、サーバーでPHPモジュールの PDO と PDO_SQLite が有効になっており、Webサーバーの実行プロセスがDBファイル(me_mailform/data/db/serial.sqlite)の書き込み権限を持っている必要があります。

通し番号を発行して、メール本文と送信画面に表示する例を紹介します。
config.ini の [serial] セクションを次のように編集します。

[serial]
;; 通し番号発行機能(無効:0 、有効:1)
serial = 1

;; CSVヘッダー行の項目名
label = 通し番号

;; 通し番号フォーマット
serial_format = "{_date}-%08d"
;; 通し番号日付フォーマット
serial_date_format = Ymd
;; オフセット
serial_offset = 1000
;; 最大値
;serial_max = 1000

この設定の場合、「20141231-00001001」のように年月日と8桁の数値の番号が発行されます。

この番号をメール本文(body.txt, reply_body.txt)で使用するには次のように指定します。

受付番号:{_serial}

※ {_serial} はメール件名(mail.ini の subject, reply_subject設定)に指定することも可能です。

送信画面(send.html)に使用すには、次のようなHTMLを記述します。

<div>受付番号:<span id="_serial"></span></div>

送信内容をCSVファイルに保存する

メールフォームに入力された内容をメール送信時にCSVファイルに保存します。
入力内容を全てCSVファイルに保存したい場合は、config.ini の [csv] セクションの csv_file 項目を次のように設定します。

[csv]
;; CSVファイル名
;; CSV保存機能を利用する場合は、保存するファイル名を指定します。
csv_file = contact.csv

このように設定するとメール送信時にCSV保存ディレクトリ(me_mailform/data/csv/)にcontact.csv ファイルが書き出されます。

CSV保存ディレクトリはWebサーバーの実行ユーザーが書き込み権限を持っている必要があります。
CSV保存ディレクトリが外部からアクセスできないことをご確認ください。
設定ファイル・ログファイルの配置を変更する」をご参照のうえ、必要に応じて対策してください。

CSVファイルは item.ini ファイル内のアイテムの記述順に出力されます。 日時やIPといった送信者情報も出力されます。
ファイルが新規作成される際に見出し行が出力されます。
CSVファイルはFTPを使用するか、ベーシック認証を設定してダウンロードしてください。
ファイルをリセットしたい場合は書き出されたCSVファイルをサーバーから削除してください。

CSVファイルに保存するアイテムを個別に指定したい場合は次のように item_list を編集します。

;; 保存アイテムリスト
;; 指定をコメントアウトすると、全アイテムと送信者情報が保存されます。
item_list = _serial, _date, name, email, comment, _ip, _host, _ua

この場合は、通し番号、日付、名前、メールアドレス、コメント、IP、ホスト名、ユーザーエージェントの順番にCSVファイルに保存されます。
設定を変更した場合は、保存される列がずれてしまうため、CSVファイルを一旦削除してください。

CSVファイルはデフォルトでは、文字コードは SJIS-win で保存されます。
多言語の投稿や機種依存文字を想定する場合は UTF-8 をお勧めします。CSVを利用するアプリケーションやシステムに応じて設定を調整してください。

;; CSVファイルの文字コード
;; 例: "SJIS-win", "UTF-8" など
char_code = SJIS-win

;; BOM(バイトオーダーマーク)
;; "1" を指定するとUTF-8の場合にBOMをファイルの先頭に出力します。
;; BOMが出力されるのはCSVファイルの初回書き込み時のみです。
;; char_codeを UTF-8 に設定して、BOMを出力するとWindows版のExcelでもダブルクリックでファイル
;; を開けるようになる場合があります。
bom = 0

※ [csv] セクションの char_code と bom 項目はバージョン1.0.1で追加されました。

設定ファイル・ログファイルの配置を変更する

設定ファイル・ログファイルは通常は /me_mailform/data/ に配置されます。
これらのディレクトリは .htaccess ファイルにより外部から参照されることを防いでいますが、.htaccess が無効になっているサーバも存在します。
そのような場合に、設定ファイルやログファイルを外部から参照されないようにするためには、/data/ ディレクトリの配置を変更します。

手順1:/data/ ディレクトリをドキュメントルート外の任意の位置に配置する。
例:/data/ を /home/user/data/ に移動する。

手順2:DATA_ROOT を設定する。
index.php ファイルに /data/ ディレクトリのパスを設定する。
設定前:(26行目付近)

define('DATA_ROOT', dirname(__FILE__) . ME_MAILFORM_DIR . 'data');

設定後:

define('DATA_ROOT', '/home/user/data');

※ data ディレクトリの最後のスラッシュは不要です。

フォーム画面の文字コードを変更する

付属サンプルの文字コードは UTF-8 が使われています。ここでは Shift-JIS に変更する例について説明します。
入力画面、確認画面、送信画面、エラー画面のHTMLファイルの文字コードを Shift-JIS に変更します。
config.ini の [global] セクションの char_code を次のように指定します。

char_code = SJIS-win

受信したメールで文字化けが発生する場合は「フォーム画面」ではなく、「送信メール」の文字セット・エンコードを調整してください。

スクリプトファイル(/script/ ディレクトリ配下の全てのファイル)や設定ファイル(config.ini, item.ini, mail.ini, message.ini)やメール本文ファイル(body.txt, reply_body.txt)は UTF-8 が使われています。これらの文字コードは変更しないでください。

送信メールの文字セット・エンコードを変更する

初期設定では、送信されるメールの文字セット(文字コード)は UTF-8 で、エンコードは base64 が指定されています。
設定は、mail.ini ファイルの [mail] セクションで行います。
初期設定:

[mail]
charset = UTF-8
encoding = base64

ここでは文字セットを ISO-2022-JP に、エンコードは 7bit に変更します。
変更例:

[mail]
charset = ISO-2022-JP
encoding = 7bit

※バージョン 1.0.5以下では、ISO-2022-JP・7bit が初期設定値でした。