カスタマイズ

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

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

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

アーカイブファイルに含まれる 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.zipAddrRun() メソッドの引数を調整します。
メソッドの引数は次のようになっていて、郵便番号もしくは住所用input要素のname属性を指定します。

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

※このメソッドはボタン部品の onclick 属性に指定します。
※郵便番号の onkeyup 属性で指定する場合は、memf.zipAddrRun() メソッドの代わりに memf.zipAddr() メソッドを指定します。
※zipAddr() メソッドは同じ番号では再検索を行わない点が zipAddrRun() メソッドとの違いです。引数の指定方法はまったく同じです。
※これらのメソッドを利用するためには、memf.js を読み込む必要があります。

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

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

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

コード例:

<div class="input-group-addon">〒</div><input type="text" name="ex1_zipcode" class="form-control" value="" placeholder="ex1_zipcode">
<input type="button" class="btn btn-info" value="住所を自動入力" onclick="memf.zipAddrRun('ex1_zipcode', '', 'ex1_addr'); return false;" title="郵便番号から住所を自動入力する">

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

コード例:

<div class="input-group-addon">〒</div>
<input type="text" name="ex2_zip1" class="form-control col-2" value="" placeholder="ex2_zip1">
<div class="input-group-addon">-</div>
<input type="text" id="ex2_zip2" name="ex2_zip2" class="form-control col-2" value="" placeholder="ex2_zip2">
<input type="button" class="btn btn-info" value="住所を自動入力" onclick="memf.zipAddrRun('ex2_zip1', 'ex2_zip2', 'ex2_addr'); return false;" title="郵便番号から住所を自動入力する">

<input type="text" name="ex2_addr" class="col-12" placeholder="ex2_addr"></td>

住所を4つに別ける

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

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

コード例:

<div class="input-group-addon">〒</div>
<input type="text" name="ex3_zip1" class="col-2" placeholder="ex3_zip1">
<div class="input-group-addon">-</div>
<input type="text" name="ex3_zip2" class="col-2" placeholder="ex3_zip2">
<input type="button" class="btn btn-info" value="住所を自動入力" onclick="memf.zipAddrRun('ex3_zip1', 'ex3_zip2', 'ex3_pref', 'ex3_city', 'ex3_town', 'ex3_st'); return false;" title="郵便番号から住所を自動入力する">

<select name="ex3_pref" class="form-control col-3">
    <option value="">--</option>
    <option value="北海道">北海道</option>
    <option value="沖縄県">沖縄県</option>
    <option value="海外/その他">海外/その他</option>
</select>
<input type="text" name="ex3_city" class="col-6" placeholder="ex3_city">
<input type="text" name="ex3_town" class="col-6" placeholder="ex3_town">
<input type="text" name="ex3_st" class="col-6" 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" パラメータを初期値として受け取ります。
※ここではラジオボタンの実装例を紹介しましたが、セレクトボックスなどでも同様に動作します。
※「お問い合わせ種別」以外にも、「申込日」や「注文商品名」と連携するといった活用方法があります。

予約・注文フォームで料金を計算する

priceタイプのアイテムを使うことで注文数と単価を掛けて料金を計算したり、複数商品の合計を計算することができます。 ここでは、「CMS」と「メールフォーム」という2つの商品の合計金額を計算する例に設定方法を説明します。

item.ini を次のように指定します。(注文内容部分のみ抜粋)

[cms_unit]
type = price
label = "CMS単価"
value = 75600

[cms_quantity]
type = select
label = "CMS数量"

[cms_amount]
type = price
label = "CMS金額"
product = cms_unit * cms_quantity

[mf_unit]
type = price
label = "メールフォーム単価"
value = 10800

[mf_quantity]
type = select
label = "メールフォーム数量"

[mf_amount]
type = price
label = "mf金額"
product = mf_unit * mf_quantity

[total]
type = price
label = "合計金額"
sum = cms_amount + mf_amount
min_number = 1
msg_min_number = "いずれかの商品を選択してください。"

cms_unit アイテムでは「CMS」の単価を指定します。これは計算する際に利用しますが、入力画面にも表示させる値になります。
cms_amount アイテムでは、CMSの単価と数量を乗算して金額を計算します。 「product = cms_unit * cms_quantity」を指定することで単価と数量を掛けることができます。 product で指定出来る値はアイテム名と * (半角アスタリスク) と 数値 (例: 1.08)のみです。
total アイテムでは、「sum = cms_amount + mf_amount」を指定することで「CMS」と「メールフォーム」の金額を足して合計を計算することができます。 sum で指定出来る値はアイテム名と + (半角プラス)と数値のみです。
total アイテムに min_number と msg_min_number を指定することでいずれかの商品に1以上が指定されていることを確認しています。

メール本文ファイル(body.txt, reply_body.txt)では次のように指定します。

■ご注文情報
MicroEngine CMS ライセンス
単価:{cms_unit}円
数量:{cms_quantity}
料金:{cms_amount}円

MicroEngine メールフォーム ライセンス
単価:{mf_unit}円
数量:{mf_quantity}
料金:{mf_amount}円

合計:{total}円

入力画面の例

<div class="form-group row">
  <label class="col-sm-3 col-form-label">商品情報</label>
  <div class="col-sm-9">
    <div id="total_error" class="alert alert-danger">エラーメッセージ</div>
    MicroEngine CMS ライセンス <span id="cms_unit"></span>円
    <select name="cms_quantity">
        <option value="0">0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
    </select>
    <div id="cms_quantity_error" class="alert alert-danger">エラーメッセージ</div>
    <hr>
    MicroEngine メールフォーム ライセンス<span id="mf_unit"></span>円
    <select name="mf_quantity">
      <option value="0">0</option>
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
      <option value="4">4</option>
      <option value="5">5</option>
    </select>
    <div id="mf_quantity_error" class="alert alert-danger">エラーメッセージ</div>
  </div>
</div>

<span id="cms_unit"></span> を指定することで item.ini で指定した単価を表示させることができます。

確認画面の例

<div class="form-group row">
  <label class="col-sm-3 col-form-label">商品情報</label>
  <div class="col-sm-9">
    MicroEngine CMS ライセンス <span id="cms_unit"></span>円 数量:<span id="cms_quantity"></span> 金額:<span id="cms_amount"></span>円
    <hr>
    MicroEngine メールフォーム ライセンス <span id="mf_unit"></span>円 数量:<span id="mf_quantity"></span> 金額:<span id="mf_amount"></span>円
    <hr>
    合計料金:<span id="total"></span>円
  </div>
</div>

注文数量の組み合わせを試して期待した金額が計算されることを確認してください。 ※ 乗算結果は小数点以下は切り捨てになります。

添付ファイル機能を利用する

フォームの入力画面でアップロードされたファイルを管理者宛のメールに添付して受け取れるようにします。

添付ファイルをアップロードする場合は、その合計ファイルサイズをPHPが扱える必要があります。 php.ini の memory_limit, post_max_size, upload_max_filesize, max_file_uploads の設定値を確認して、不足している場合は必要な値に設定してください。
メールサーバー側で添付ファイルが拒否される場合もありますので1通あたりのメールサイズなどメールサーバー側の制限事項をご確認ください。

.htaccess で設定する例

php_value upload_max_filesize 12M

item.ini で添付ファイルを受け取るためのアイテムを定義します。

;; 添付ファイル
[file]
type = file
label = "添付ファイル"

入力画面に file タイプの input 要素を用意します。

<div class="form-group row">
  <label for="file" class="col-sm-3 col-form-label">添付ファイル</label>
  <div class="col-sm-9">
    <input type="file" id="file" name="file" class="form-control-file" value="">
    <div id="file_error" class="alert alert-danger" role="alert">エラーメッセージ</div>
  </div>
</div>

※ form 要素に enctype="multipart/form-data" が指定されていることを確認してください。

確認画面でアップロードされたファイル名を表示します。

<div class="form-group row">
  <label class="col-sm-3 col-form-label">添付ファイル</label>
  <div class="col-sm-9">
    <div id="file"></div>
  </div>
</div>

メール本文ファイルでアップロードされたファイル名を表示します。

■添付ファイル
{file}

config.ini で添付ファイルに関する設定を行います。

;;;===========================
;;; アップロードファイル セクション
[upload_file]
;; アップロードしたファイルをメールに添付する
attach_mail = 1

;; アップロードしたファイルをサーバーに保存する
save_file = 0

;; 許可拡張子
;; 許可したい拡張子を小文字で指定する。
extensions = jpeg, jpg, gif, png, zip

;; 最大ファイルサイズ
;; 数値はMBとして扱う。単位は指定しません。
;; PHPが利用できるメモリ・POSTサイズはこの設定値以上を確保してください。
;; 例: 10MBを指定したい場合は、「10」を指定します。
max_filesize = 10

;; アップロードファイルパス
;; アップロードしたファイルをサーバーに保存する場合のファイルパスを指定します。
;; 次の内容を指定できます。
;; 通し番号                    {_serial}
;; 乱数値                      {random}
;; オリジナルファイル名        {filename}
;; 拡張子                      {ext}
;; アイテム名                  {item_name}
upload_file_path = {random}/{filename}

save_file に 1 を指定するとアップロードされたファイルがサーバーの data/uploads ディレクトリに保存されるようになります。 メールに添付できない大きさのファイルを受け取りたい場合などはこの機能を活用してください。アップロードされたファイルのURLはメール本文ファイルに {file_url} を指定することで確認できます。 data/uploads ディレクトリは .htaccess によりWebサーバー経由のアクセスが禁止されていますが、.htaccess の設定が有効になっていることをご確認ください。 サーバーに保存されたファイルはFTPで取得するか、 data/uploads ディレクトリにベーシック認証を指定するなどして管理してください。

設定後に実際にファイルを添付して受け取れることを確認してください。

SMTP送信機能を利用する

Webサーバー内のSendmailプログラムからではなく、他のメールサービスや自社のメールサーバーを経由してメールを送信する方法について説明します。
SMTP送信機能を利用すると、sendmailプログラムを持たないWebサーバーからでもメールを送信できます。また、メールクライアントソフトを利用して送信する場合と同等の処理になるため、スパムと判定されるリスクを大きく下げることができます。

SMTP送信機能を利用するには、mail.ini の [smtp]セクションに設定を追記します。
初期状態では、[smtp]セクション自体がコメントアウトされて無効になっています。
「認証なし」、「SMTP認証」、「POP Before SMTP」の認証方法の違いにより設定する項目が異なります。
※SMTP認証で対応している認証方式は PLAIN のみとなります。
※SMTPSに対応していますが、STARTTLS には対応していません。

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

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

Amazon SES でSMTP認証をして SMTPS(SMTP over SSL)で接続する例:

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

※SMTPS(SMTP over SSL)で接続する場合はホスト名の先頭に「ssl://」を指定します。
※利用サービスによってホスト名が異なります。

GmailサービスでSMTP認証をして SMTPS(SMTP over SSL)で接続する例:

※Gmailサービスを利用するためには、Gmail側で「安全性の低いアプリの許可」を有効にする必要がありました。Gmailサービスを提供するGoogle社よりこの機能による接続を無効にする旨の発表がされました。そのため、このカスタマイズ事例の紹介も取りやめることになりました。

管理者宛メールに返信先アドレスを指定する

フォームにemailタイプの項目がある場合、その入力値を管理者宛メールの返信先アドレス(Reply-toヘッダー)に指定できます。
次のように mail.ini の reply_to_item に email タイプの項目名を指定します。

;; 返信先アドレス(Reply-toヘッダー)に採用するフォームアイテム名
reply_to_item = email

from 項目で指定されたメールアドレスからメールが届きますが、返信時にはフォーム投稿者のメールアドレスを宛先にすることができます。

;; 返信先アドレス(Reply-toヘッダー)に採用するフォームアイテム名
from_name_item = name

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

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

;; この項目をコメントアウトすると自動返信メールは送信されません。
;to_item = email

※ reply_to_item に関する注意点
to_item をコメントアウトして自動返信メールを停止した場合でも、reply_to_item は機能します。 そのため、reply_to_item = email を指定している場合で、email アイテムを メールアドレス 以外の用途として使っている場合はその値を利用しようとするためエラーが発生します。 この場合は、reply_to_item もコメントアウトしてください。

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

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

<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>

※番号をリセットしたい場合は製品パッケージに含まれる未使用状態の serial.sqlite ファイルで上書きしてください。

メール本文ファイルでPHPを実行する

標準の txt 拡張子では入力値の置換しか行なえませんが、PHPを利用することで if 文などで本文の内容を制御することができるようになります。 メール本文ファイル(body.txt, reply_body.txt)の拡張子を php に変更することで、PHPを利用できるようになります。 変更後のファイル名は body.php もしくは reply_body.php になります。

メール本文のPHPファイルでは $item 配列が利用できます。 $item配列はフォームの入力値を保持しており、フォームアイテム名を添え字に指定することでアクセスすることができます。

フォームの入力値によって本文内容を制御する例:

■ご注文情報
<?php if ($item['cms_quantity'] > 0): ?>
MicroEngine CMS ライセンス
単価:<?php echo $item['cms_unit'] ?>円
数量:<?php echo $item['cms_quantity'] ?>

料金:<?php echo $item['cms_amount'] ?>円
<?php endif; ?>

チェックボックスをチェックした場合だけテキストを追加する例:

<?php if (!empty($item['use'])): ?>
useをチェックした場合のテキスト
<?php endif; ?>

送信内容を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ファイル1行目にはアイテムラベル(item.ini の各アイテムのlabel設定値)が表示されます。 予約アイテム(_date, _ip, _host, _ua) のラベルを任意の値に変更したい場合は、item.ini で次のように指定してください。

[_date]
label = "お申込日"

[_ip]
label = "IPアドレス"

[_host]
label = "ホスト名"

[_ua]
label = "ユーザーエージェント"

送信内容のCSVファイルを管理者宛メールに添付する

メールフォームに入力された内容をメール送信時にCSVファイルにして、管理者宛メールに添付します。
CSVファイルの設定方法は、「送信内容をCSVファイルに保存する」と共通です。 管理者宛メールに添付したい場合は、config.ini の [csv] セクションの csv_attach 項目を次のように設定します。

;; CSV添付ファイル名
;; CSV添付機能を利用する場合は、メールに添付するファイル名を指定します。
;; 別途通し番号を設定して、csv_attach = contact-{_serial}.csv のような値を指定するとファイル名に通し番号を利用することができます。
;; この機能はサーバー内にファイルを保存するCSV保存機能とは異なり、CSVファイルにはメールフォーム送信1回分の内容のみが含まれます。
csv_attach = contact.csv

※ この機能は、製品バージョン 1.1.5 で追加されました。
※ 製品バージョン 1.1.6 からは、添付ファイル名に通し番号を指定できるようになりました。

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

設定ファイル・ログファイルは通常は /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