PR TIMESデザイナー&エンジニアブログ BREAK TIMES

PR TIMES Developer Blog(デザイナー&エンジニアによる開発者ブログ)

PR TIMES Developer Blog
デザイナー&エンジニアによる開発者ブログ

メール送信機能における開発環境について

こんにちは!エンジニアの落合です。

みなさんは、メール送信部分の開発はどのように行っていますか?
会員登録で、テストメールを送信する部分などの場合、実際にメールを受け取りたい場合は、実際に受け取れるメールアドレスで登録する必要があります。

PR TIMESでは、メール配信機能があるサービスを運営しており、開発時にメール内容を確認する為、繰り返し送信テストを行う必要があります。
このようなケースの場合、複数のメールアドレスでテストする為、実際にメールを飛ばしていると、事故送信をしてしまう可能性があります。

そんな危険性のある中で開発するのは、慎重になりながらの開発となってしまいますので、僕らのチームでは、メールを外に飛ばさないで、localhostに飛ばして、それをWEBメーラーで確認するというテスト方法を用いて開発しています。

Postfixの設定

今回の設定では送信側と受信側の両方を設定する必要があります。
それでは、早速ですがPostfixで全てのメールを外部に送らずに、全てローカルに送信する設定を行います。

まずは、/etc/aliases.regexpという名前で以下の内容で作成します。

[vagrant@localhost ~]$ sudo su
[root@localhost vagrant]# vim /etc/aliases.regexp
vim ) /(?!^root$|^catchall$)^.*$/ catchall

内容は、root以外の内容は、chachallというユーザーへ送信するという設定です。
次に、main.cfファイルにalias_mapsに上記で作成したファイルを指定します。

[root@localhost vagrant]# vim /etc/postfix/main.cf
vim ) #alias_maps = dbm:/etc/aliases
vim ) alias_maps = hash:/etc/aliases, pcre:/etc/aliases.regexp
vim ) #alias_maps = hash:/etc/aliases, nis:mail.aliases

そして、次にtransport_mapsを設定する為、以下を「/etc/postfix/transport_maps」という名前で作成します。

[root@localhost vagrant]# vim /etc/postfix/transport_maps
vim ) /^.*@.*$/ local

全てのメールをlocalへという設定です。
そして、先ほど修正したmain.cfファイルを再度修正します。

[root@localhost vagrant]# vim /etc/postfix/main.cf
vim ) # TRANSPORT MAP
vim ) #
vim ) # See the discussion in the ADDRESS_REWRITING_README document.
vim ) transport_maps = pcre:/etc/postfix/transport_maps

※検索する場合は、「TRANSPORT MAP」で検索してください。
デフォルトでは設定されていないので、「transport_maps」で検索しても出てきません。。。
リスタートを実行して、設定を反映させます。

[root@localhost vagrant]# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

これでメールはroot以外、全てのメールがcatchallというユーザーのメールボックスへ送られるようになります。

受信サーバーの設定

メールが、全てlocalhostに飛ぶようになったところで、今度は受信側の設定を行います。
まずは、受信サーバーをインストールする必要があります。
dovecotをインストールして、受信設定をしていきます。

[root@localhost vagrant]# yum install -y dovecot
Installed:
  dovecot.x86_64 1:2.0.9-7.el6_5.1
Complete!
[root@localhost vagrant]# vim /etc/dovecot/dovecot.conf
vim:21 ) protocols = imap pop3 ←追記
[root@localhost vagrant]# vim /etc/dovecot/conf.d/10-auth.conf
vim:9 ) disable_plaintext_auth = no ←修正
[root@localhost vagrant]# vim /etc/dovecot/conf.d/10-mail.conf
vim:31 ) mail_location = mbox:~/mail:INBOX=/var/spool/mail/%u ←修正

次に、受信するユーザー(chachall)を作成します。

[root@localhost vagrant]# useradd catchall
[root@localhost vagrant]# passwd catchall
New password: catchall
Retype new password: catchall
passwd: all authentication tokens updated successfully.

そして、catchallの受信BOXを用意します。

[root@localhost vagrant]# mkdir -p /home/catchall/mail/.imap/INBOX
[root@localhost vagrant]# chown catchall:catchall /home/catchall/mail/.imap/INBOX

これで準備が整いましたので、localhostに飛んでいるメールが、chachallに送信されているかをチェックしたいと思います。

mailコマンドで検証

mailを仮想マシンより簡易的にテストする場合は、mailコマンドが有効です。
まずは、インストールしてmailを送信してみたいと思います。

[vagrant@localhost ~]$ sudo yum install -y mail
・・・中略・・・
Complete!
[vagrant@localhost ~]$ sudo su
[root@localhost vagrant]# mail catchall
Subject: test
test
.
EOT
[root@localhost vagrant]# mail メールアドレス
Subject: test
test
.
EOT

これで、指定したメールアドレスへメールが送信されていなければ成功となります。
また、送信されたメール本文を確認するには、WEBメーラーを利用するのが、非常に便利です!

WEBメーラー(rainloop)をインストール

色々調べた限り、個人的にrainloopが気に入ったので導入してみました!
早速以下のページからダウンロードして利用を開始です!
ちなみに、PHPapacheのインストールと設定は必須です。
http://rainloop.net/downloads/

適当な場所にコピーして、vurturalhostの設定をしたいと思います。

[root@localhost vagrant]# mkdir /var/www/rainloop
[root@localhost vagrant]# cp -apr /vagrant/rainloop/ /var/www/rainloop/
[root@localhost vagrant]# chown -R apache:apache /var/www/rainloop/
[root@localhost vagrant]# vim /etc/httpd/conf.d/rainloop.conf
以下 vim)
<VirtualHost *:80>
  ServerName mail.develop.jp
  DocumentRoot /var/www/rainloop/
  ErrorLog /var/log/rainloop_error.log
  TransferLog /var/log/rainloop_access.log
  <Directory /var/www/rainloop/>
    AllowOverride all
    Order allow,deny
    allow from all
  </Directory>
</VirtualHost>

[root@localhost vagrant]# service httpd restart

これでアクセスしたらメールアドレスとパスワードを求められたので、
「catchall@localhost」「catchall」って入れたら・・・「Domain is not allowed」って出ました。
色々調べたら管理画面なるものが存在するようです。
http://mail.develop.jp/?admin」へアクセスし、ID:admin PASS:12345でログインします。
そして、「Domains」のところへアクセス。
「Add Domain」を押下し、入力項目の全てに「localhost」と入力し、
「Use short login form」にチェックをいれ「Add」ボタンを押下します。
次に、「Login」のところに、「Default Domain」を「localhost」と設定しエンターキーを入力。
以上で設定が完了となるので、再度ログイン画面へ戻ります。
そこで、ID/PASS共に、「catchall」と入力し、ログインしてください。
ログインに成功すると、先ほど送信したメールの内容を確認できると思います。


今回は、PR TIMESが提供しているサービスのメール配信機能部分で使用している、開発環境について書かせていただきました。
メール機能の開発は、配信テストを繰り返し行う為、実際にメール送信してしまうと、事故送信につながってしまう危険があります。
こういった環境を用意して実装する事で、安心して開発に望む事が可能になります。
やはり、開発中はコーディングミスもありますので、気軽にテストメールを送信出来る環境を用意してから、開発を実施したいものですね!

以上、落合でした!