SOY CMSのユーザから下記のようなお問い合わせがありました。

/*************************************************/

SOY Inquiryで設置したフォームで、お問い合わせがあった際に管理者に自動で送信されるメールで、お問い合わせ内容をコンパクトにして出力したい

/*************************************************/


上記の内容が何を言わんとしているのか?というと、

初期設定のフォームであれば、管理者に自動送信されるお問い合わせ内容は

inq_example_1

のように見やすいけれども

件名や本文の個所に注目してもらうと、

項目名から:(コロン)までスペースが入っている。


例えば、項目名が「とても長い項目名をここに入れる」というものだった場合、

inq_example_2

このように一番長い項目に合わせて、内容全体が整形されてしまう。

管理者に送信されるメールでは、

小さなスマホでも確認できるようにスペースを詰めて出力するにはどうすれば良いか?

というのが今回のテーマになります。




SOY Inquiryでは、要PHPではあるけれども、

フォームごとにメール文面を拡張できる機能があります。


SOY Inquiryでお問い合わせがあった場合にチャットワークに通知したいで管理者の他にチャットワークの方にも送信する際に使用したmail.admin.phpを今回も活用してみる。


defaultテンプレートを例に話を進めると、


cms
└── app
     └── webapp
            └── inquiry
                   └── src
                        └── template
                               ├── _sample
                               ├── default
                               │    ├── complete.php
                               │    ├── confirm.php
                               │    ├── form.php
                               │    ├── mail.admin.php
                               │    └── style.php
                               ├── mobile
                               └── responsive

defaultディレクトリ以下にmail.admin.phpを配置する。

配置したmail.admin.phpの記述は下記のようにする。


<?php
/**
 * 使用できる変数
 * $columns 各フォームのオブジェクト(入力内容も含む)
 * $this->form フォームの設定
 * $inquiryMailBody 出力されたお問い合わせ内容
 *
 * 拡張方法
 * echo "追加したい文字列";でメールのコンテンツ末尾に追加されます。
 * $mailBody[0]の値を上書きすると出力内容が変わります。
 */

//お問い合わせ内容をコンパクトにして出力するサンプルコード
$lines = explode("\n", $mailBody[0]);
if(count($lines)){
	$contents = array();
	foreach($lines as $line){
		//内容が空の場合はスルー
		$c = trim(substr($line, strpos($line, ":") + 1));
		if(!strlen($c)) continue;

		//お問い合わせへのリンクの出力前にbreak
		if(strpos($line, "--") === 0) break;

		$line = trim(str_replace(array(" ", " "), "", $line));
		$contents[] = $line;
	}

	$mailBody[0] = implode("\n", $contents);
}

ファイル設置後に公開側のフォームからお問い合わせをしてみるt,

inq_example_3


管理者に送信されるメールのみ、

お問い合わせ内容が詰めて出力されるようになった。