Posted at
CakePHP 3Day 15

CakePHP3でZOHO使ってコンタクトフォームを作る

More than 3 years have passed since last update.


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