CakePHP 3 Advent Calendar 2015 15日目の記事です。
メールサーバを無料で使いたかったので、ZOHOメールを選択しました。
そこで、CakePHP3でコンタクトフォームを簡単に作成してみました。
1.開発環境
サーバ:さくらVPS
メールサーバ:ZOHOメール
2.ZOHOメール
無料プランで、3ユーザーまで作れます
https://www.zoho.com/mail/
ZOHOの初期設定は、すでにたくさん情報があるので、そちらを参考に
http://appstars.jp/archive/123
さくらVPSのネームサーバの場所
さくらVPSのコントロールパネル > ネームサーバ登録
3.メールの設定が出来たかコマンドで確認
※ example.comは調べたいドメイン
$ nslookup -type=mx example.com
結果が、下記内容であれば設定完了
Non-authoritative answer:
example.com mail exchanger = 20 mx2.zohomail.com.
example.com mail exchanger = 10 mx.zohomail.com.
4.コード
configの設定
src/config/app.php
'EmailTransport' => [
'default' => [
変更なし
],
'zoho' => [
'className' => 'Smtp',
'host' => 'ssl://smtp.zoho.com',
'port' => 465,
'timeout' => 30,
'username' => 'info@example.com',
'password' => 'パスワード',
'client' => null,
'tls' => null,
],
],
Formの設定
src/Form/ContactForm.php
namespace App\Form;
use Cake\Form\Form;
use Cake\Form\Schema;
use Cake\Validation\Validator;
use Cake\Network\Email\Email;
class ContactForm extends Form
{
protected function _buildSchema(Schema $schema)
{
return $schema->addField('name', 'string')
->addField('email', ['type' => 'string'])
->addField('message', ['type' => 'text']);
}
protected function _buildValidator(Validator $validator)
{
return $validator
->notEmpty('name', '入力してください')
->add('name', 'length', [
'rule' => ['minLength', 4],
'message' => '名前は4文字以上入力してください。'
])
->notEmpty('email', '入力してください')
->add('email', 'format', [
'rule' => 'email',
'message' => 'メールアドレスを入力してください。',
]);
}
protected function _execute(array $data)
{
$email = new Email('default');
$email->transport('zoho');
$email->template('contact');
$email->viewVars([
'name' => $data['name'],
'email' => $data['email'],
'message' => $data['message']
]);
$email->from(['info@example.jp' => '差出人名']);
$email->to($data['email']);
$email->subject('件名');
$email->send();
return true;
}
}
Emailの設定
src/Template/Email/text/contact.ctp
以下の内容で送信されました。
--------------------------
Name: <?= $name."\n" ?>
Email: <?= $email."\n" ?>
Message:
<?= $message."\n" ?>
--------------------------
Controllerの設定
src/Controller/ContactsController.php
<?php
namespace App\Controller;
use App\Controller\AppController;
use App\Form\ContactForm;
class ContactsController extends AppController
{
public function index()
{
$contact = new ContactForm();
if ($this->request->is('post')) {
$contact->execute($this->request->data);
}
$this->set('contact', $contact);
}
}
Viewの設定
src/Template/Contacts/index.ctp
<?php echo $this->Form->create($contact); ?>
<?php echo $this->Form->input('name'); ?>
<?php echo $this->Form->input('email'); ?>
<?php echo $this->Form->input('message'); ?>
<?php echo $this->Form->button('Submit'); ?>
<?php echo $this->Form->end(); ?>
まとめ
ZOHOでのドメイン認証で、つまずいて実装に時間がかかりました。
CakePHP3.xの記事が2.xに比べると少ないので、もっと増えると嬉しいです。
参考にしたサイト
http://qiita.com/kozo/items/00e66e8d0c3dbbfc907c
http://qiita.com/milano/items/7a71b09e891f87b8f62e