LoginSignup
7
10

More than 5 years have passed since last update.

CakePHP+MailHog+dockerでメールテストをしてみる

Last updated at Posted at 2018-08-17

はじめに

CakePHPでメールを利用したパスワードリセット処理を実装したい。
ローカル環境でメールサーバーを立てるにはMailhogが便利だというので使ってみた。

開発環境

  • CakePHP 2.4
  • PHP 5.6
  • CentOS 6.9
  • docker

MailHogについて

MailHogとはSMTPサーバーの一つでテストメールに使用できます。
docker Hubでイメージが公開されていますので、導入が非常に簡単にできます。

導入方法

MailHogのコンテナを作る

以下を追記します。

docker-compose.yml
mailhog:
  image: mailhog/mailhog
  ports:
    - "8025:8025" 
    - "1025:1025"

この8025はMailHogのHTTPサーバーのデフォルトポート番号です。1025はSMTPサーバーのポート番号になります。
今回はメール送信をしたいので、SMTPサーバーのポート番号を追加しておく必要があります。

Dockerを再起動する

docker-compose up を実行。
docker ps -a でMailHogのコンテナが新しく作成されているのが確認できると思います。
http://localhost:8025 にアクセス。
スクリーンショット 2018-08-17 13.21.40.png
こんな感じでMailHogの画面が表示されると思います。

CakePHP側での設定

app/Config/email.php.default を app/Config/email.php にリネーム。

app/Config/email.php
public $smtp = array(
    'transport' => 'Smtp',
    'from' => array('from@localhost.com' => 'My Site'),
    'host' => 'mailhog',
    'port' => 1025,
    'timeout' => 30,
    'username' => 'user',
    'password' => 'secret',
    'client' => null,
    'log' => true,
    'charset' => 'utf-8',
    'headerCharset' => 'utf-8',
);

こんな感じ。
hostにはMailHogのコンテナ名を入力。
portはMailHogのSMTPサーバーのポートは1025なのでそれを入力。
fromのメールアドレスはなんでもいいですが、形式が合っていないとエラーになります。
logをtrueにするとエラーログに内容が吐かれます。

実際にメールを送ってみる

スクリーンショット 2018-08-17 15.04.56.png
こんな感じでフォームにメールアドレスを入力すると、そのメールアドレスに送られてくるイメージで作成します。

Controller
App::uses('CakeEmail', 'Network/Email');

public function send_mail()
{
    if(isset($this->request->data['Email']['address'])) {
         $email = new CakeEmail('smtp'); // この引数はemail.phpの変数を入れます。今回はsmtpを使用します。
         $email->to($this->request->data['Email']['address']) // フォームに入力したメールアドレス
               ->subject('title')
               ->send('mailbody');
    }
}

こんな感じでしょうか。例外処理とかガン無視ですがこれで送信はできるはずです。送信ボタンポチ−
スクリーンショット 2018-08-17 15.37.01.png
ちゃんと届いてますね!

7
10
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
7
10