8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?