Vagrant 上の CentOS6.7 で mailcatcher を使う


環境

  • vagrant
  • CentOS 6.7
  • ruby 2.4.3
  • (CakePHP2.10)

やりたいこと

ローカルの環境からメールのテスト送信をしたい。mailcatcher だと便利だよ!と言われたので入れてみます。

手順

1. インストール

ruby は既に入ってます。

$ gem install mailcatcher

途中で一回怒られました。

.
.
Building native extensions.  This could take a while...
ERROR:  Error installing mailcatcher:
    ERROR: Failed to build gem native extension.
.
.
.
checking for sqlite3.h... no
sqlite3.h is missing. Try 'brew install sqlite3',
'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
.
.

なんか足りないっぽいので、言われたとおりに不足してるのを入れてあげる。

$ sudo yum install sqlite-devel

すると、今度は成功。

Done installing documentation for sqlite3, daemons, thin, skinny, mailcatcher after 2 seconds
5 gems installed

2. 起動

$ mailcatcher
Starting MailCatcher
==> smtp://127.0.0.1:1025
/home/vagrant/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/thin-1.5.1/lib/thin/server.rb:104: warning: constant ::Fixnum is deprecated
==> http://127.0.0.1:1080
*** MailCatcher runs as a daemon by default. Go to the web interface to quit.

3. ブラウザで確認

んで、メール受信画面をブラウザで見ようと思って、はたと気がついた。
これ……Vagrant上じゃん……?
http://127.0.0.1:1080
って書いてあるけど、このURLで見られるわけないじゃん……?

ためしにvagrantに割り振ってある 192.168.33.40:1080 にアクセスしてみるも、見られない。
調べて見ると、ポートを指定して mailcatcher を起動するやり方があるらしい。ので、それをやろうと思ったら。

$ mailcatcher --http-ip 192.168.33.40
Starting MailCatcher
~~> ERROR: Something's using port 1025. Are you already running MailCatcher?
==> smtp://127.0.0.1:1025
==> http://192.168.33.40:1080

既に1025ポート使われてるんですけど、って怒られた。うん、知ってた。
一回 mailcatcher 落とそうと思ったら、どうやらPID調べて kill しないといけないらしい……?

ので、とりあえずPID調べてkillする。

$ netstat -tulpn | grep :1025
$ kill -9 6253

そして、今度はIPアドレスを指定して起動。

$ mailcatcher --http-ip=192.168.33.40

ブラウザでアクセスしてみます。
http://192.168.33.40:1080

出来たー!

ついで:メール送信の設定

CekePHP2.10の場合、メール設定はこんな感じ。
ポートを1025に指定したら良いようです。

class EmailConfig
{
  public $mailcatcher = array(
        'transport' => 'Smtp',
        'from' => '[email protected]',
        'host' => '127.0.0.1',
        'port' => 1025,
        'timeout' => 30,
        'client' => null,
        'log' => true,
        'charset' => 'utf-8',
        'headerCharset' => 'utf-8',
        'template' => 'default',
        'layout' => 'default',
    );  
}

参考