エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP 2.3で確認画面付きのお問い合わせフォームの作り方

      2017/03/11

XAMPP環境からメール送信の設定

 
前回、「ローカル環境の XAMPPからメールを送信できるように設定する」でXAMPP環境からメールの送信ができるように設定を変更しましたので、今日はいよいよメールフォームを作っていきます。
(XAMPP環境などローカル環境からメールを送信する設定が分からない方は先週の記事も読んでいただくと参考になるかと思います。)
 
 

CakePHP 2.3で確認画面付きのお問い合わせフォームの作り方

 

CakePHPで確認画面を出すプラグイン

 
CakePHPのお問い合わせフォーム製造は bakeで一括処理ができない部分もありますので、作成作業が必要にはなりますが、それほど難しい作業ではありませんので、私でも難しいものではありませんでした。
ただ、CakePHPは、基本的に入力確認画面が存在していないため、それを良しとするかどうかで難易度が大きく違ってきます。
 
日本においては「フォームと言えば入力確認画面があるもの」として認識されていますので、お問い合わせフォームで入力確認画面がないとユーザから不親切と思われてしまうことでしょう。
ということで、入力確認画面があるフォームを生成する方法を探してみたところ、便利なプラグインがありました。
 
ヘルパー機能を使って、入力画面と共通の画面を利用して入力確認画面を生成するというプラグインです。非常に便利です。
 
Xformヘルパーのインストールに関しては、下記のページにありましたが、これだけではその利用方法がよく分からなかったのですが、
http://d.hatena.ne.jp/cakephper/20120222/1329874432
 
下記のサイトに使い方も含めてまとめられていましたので、こちらが非常に参考になりました。
http://drawxcode.com/2012/12/cakephp-2%E3%81%A7fom%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/
 
また、CakePHPを使う際に非常に便利な CakePHP Plusというプラグインも設定することになります。
http://d.hatena.ne.jp/cakephper/20120209/1328776671
 
 
ただ、この解説ページでは、実際のメール送信、入力情報の保存までは書かれていませんので、それについては下記のページを参考にしました。
http://log.noiretaya.com/151
 
また、上記ページでは入力内容を保存していませんが、問い合わせ内容を管理するために DBに登録する必要がありましたので、登録する処理を入れました。
 
 


 

CakePHPで確認画面付きフォームのサンプルコード

 
では、まずテーブルと作ります。
ちなみに、今回私は「inquiries(inquiry)」で今回のお問い合わせフォームを作りました。
 
————–(テーブル)

————–
 
 
続いて、CakePHPからメール送信処理が行えるよう「/config/email.php」ファイルを作成します。
「/config/email.php.default」のファイル名を「email.php」に変更し、下記の部分を追加します。
from、toの値はここで設定をしておかないと動きませんが、controllerの中で設定することもできますので、適当な値を入れておいても問題ありません。
 
————–(/config/email.php)

————–
 
 
続いて、入力フォームの Viewを作りましょう。
 
————–(/View/Inquiries/form.ctp)

————–
 
 
Modelは、バリデーションの設定を記述します。
今回は、入力チェックのみしかしていませんが、メールチェックや、文字数チェックなど必要に応じて追加してください。
また、今回は、入力された情報をテーブルに保存するように作成しますので下記のようになりますが、テーブルを使用しない場合は、「public $useTable = false;」の 1行を追加してください。
 
————–(/Model/Inquiry.php)

————–
 
 
続いて、controllerを作ります。
メール送信処理を使う場合は 3行目の「App::uses(‘CakeEmail’, ‘Network/Email’ );」が必要になってきます。
 
————–(/Controller/InquiriesController.php)

————–
 
 
入力項目とは別に項目を設定する場合などは、「$vars[‘update_date_set’] = date ( ‘Y-m-d H:i:s’, time() );」のような感じで $varsに入れていきましょう。
確認メールの中で値を受け取るときは、配列のキーで設定した項目名がそのまま変数名として受け取れます。
 
また、確認メールで「<pre class=”cake-error”><a href=”javascript:void(0);” onclick=”document.getElementById(‘cakeErr51dd21afcee1f-trace’)……..」のように、メール本文に何か入力した覚えがない文字列が出てきている場合は、おそらく、その変数が設定されていません、というエラーメッセージです。
HTMLのタグの部分を、HTMLファイルにコピペして表示させたりすると書かれている内容が分かると思います。
 
 
続いて、確認メールのテンプレートです。
ここでは、変数は、入力項目として設定されている変数名をそのまま記述すれば OKです。
 
————–(/View/Emails/text/inquiry.ctp)

————–
 
 
署名のファイルを設置します。
こちらは、テキスト情報のため、中身はなんでも問題ありませんが、本番運用する場合はしっかり凝った方がいいファイルでしょうね。
 
————–(/View/Layouts/Emails/text/inquiry.ctp)

————–
 
これでメールの送信が行えます。
 
 

sendmailが設定されていない環境からメールを送信する方法

 
XAMPP環境などのローカル環境からメールを送信する方法として、ローカル環境にメール送信の環境を整えるという方法もありますが、ローカル環境の sendmailを使わずにメールを送信する方法もあります。
 
その方法として「Phpmailerでスパム回避!Gmail等のSMTPを経由するPHPのメールフォーム解説(http://blog.s-giken.net/235.html)」と言う記事を書いていますので参考にしてください。
これは、サーバの sendmailで送るとスパム判定さてしまうので、それの対処方法を書いた記事ではありますが、外部の SMTPサーバを経由してメールを送信する方法ですので、ローカル環境などのメールを送信する環境がないサーバからも送信することが出来る方法になります。
 
(2015.06.14 追記)

 - CakePHP 2.x 3.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
CakePHP3のキャッシュをクリアする方法「bin/cake cache clear_all」を使う

CakePHP3では処理を高速化する手法の一つとしてキャッシュを利用している。しかし、その情報は元の情報を更新しても反映されない場合がある。そんなときはキャッシュを削除する必要がある。

CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。

CakePHP3でajaxを利用する処理の実装方法を解説。プルダウンを変更するとデータベースの値を取得し検索結果の内容を変更するというような処理を想定。CakePHP3.6以降の CSRF対策対応済。

CakePHP 2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法

CakePHPの検索プラグイン Search Pluginの検索処理の中で入力エリア一つで複数の項目を同時に検索する方法を解説。

CakePHP3ログファイルの出力方法・$this->log()の解説
CakePHP3ログファイルへの出力・$this->log()、独自ログへの出力方法の解説

コントロール、モデルの変数の中身を見るときはログに出力する方法が有効です。$this->log()を利用すると変数だけじゃなく、連想配列、オブジェクトも簡単にログ出力ができます。

CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可
CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可

CakePHP3のユーザ管理、ログイン認証プラグインである「CakeDC/Users」のメッセージを日本語にする手順の解説とともに、日本語の翻訳ファイルを提供。ファイルを設置すれば日本語になる!

CakePHP3のCakeDC/Usersのログイン後のリダイレクトを設定解説
CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説

CakeDC謹製Usersプラグインの紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。

CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。Usersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。

CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法

CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。

CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定
CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定

CakePHP3でOGPを設定する方法を解説。metaタグを編集するHTMLヘルパーを利用してOGPのタグを編集する。また、エレメントとして分割することでメンテナンス性も向上させる。

CakePHP3で保存前にバリデーション結果を取得する2つの方法
CakePHP3で保存前にバリデーション結果を取得する2つの方法

CakePHP3でデータベースに値を保存する前にバリデーションを行い、その結果によって処理を振り分ける方法について解説。「$topic->errors()」と「$topic->hasErrors()」の2つの方法がある。