メール送信のテストする為の環境構築した際にてこずったので、同じミスをしないようにブログに投稿します。 Vagrantについては、昨日書いたエントリーの通りとなります。

suusuke - blog - Vagrantで構築したCentOSで開発する.

目次

  1. Postfixインストール・設定
  2. Dovecotインストール・設定
  3. Hostから送受信テスト

Postfixインストール・設定

Postfixをインストールして、設定ファイルを変更します。 開発環境なので、メールが送れているかチェックしたいだけなので、全てのドメイン宛のメールをローカルの配送する用に設定します。

$ yum -y install postfix $ cp /etc/postfix/{main.cf,main.cf.org} $ vi /etc/postfix/main.cf # 全てのメールを受け取る inet_interfaces = all # ローカル配送で不明なユーザを拒否しない local_recipient_maps = # Maildir形式として保存するディレクトリを /usr/local/mail/ の下にユーザー毎に作成する mail_spool_directory = /usr/local/mail/ # ローカル配送で不明なユーザへのメールは maildev へ送る luser_relay = maildev # トランスポートマップを指定 transport_maps = hash:/etc/postfix/transport
トランスポートマップの設定
$ vi /etc/postfix/transport # 全てローカルに配送 * local: $ postmap /etc/postfix/transport
設定反映
$ /sbin/service postfix reload
Maildirの場所ですが、通常であれば、~/Maildir/となるのですが、/home/ディレクトリをホストにマウントしており、何度メールを送ってもnot permittedになってしまい、配送に失敗していたため、変更しました。 ただ、Vagrantfileでマウントの設定でユーザーは root パーミッションは 777 にしているつもりなのですが、ここは今後の課題ですね。
Nov 30 19:50:20 localhost postfix/local[5922]: 7D5656F026C: to=<maildev@mail.vagrant-centos59_64.localdomain>, relay=loc al, delay=0.17, delays=0.14/0/0/0.03, dsn=5.2.0, status=bounced (maildir delivery failed: create maildir file /home/mail dev/Maildir/new/1385808620.V15I7c25M679327.vagrant-centos59_64: Operation not permitted)
配送先ユーザーmaildevは予め追加しておきます。
$ useradd maildev $ passwd maildev
元々、sendmailもpostfix入っていないサーバーだったので、mtaの変更は必要ないですが、一応確認だけします。
$ /usr/sbin/alternatives --config mta 1 プログラムがあり 'mta' を提供します。 選択 コマンド ----------------------------------------------- *+ 1 /usr/sbin/sendmail.postfix Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

Dovecotインストール・設定

Dovecotをインストールし、設定します。 各プロトコルを使えるようにと、PostfixでMaildirのパスを変更しているのでそこを設定します。

$ yum -y install dovecot $ cp /etc/{dovecot.conf,dovecot.conf.org} protocols = imap imaps pop3 pop3s mail_location = maildir:/usr/local/mail/%u
Dovecotは、本番環境に合わせて、1系をyumでそのままインストールしました。

Hostから受信テスト

telnetコマンドでメールを送ります。

$ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mail.vagrant-centos59_64.localdomain ESMTP Postfix helo localhost 250 mail.vagrant-centos59_64.localdomain mail from: k.suke.suzuki@gmail.com 250 2.1.0 Ok rcpt to: test@test.com 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> subject: test てすとです。 . 250 2.0.0 Ok: queued as 6E27E6F026E quit 221 2.0.0 Bye Connection closed by foreign host.
HostにThunderbirdをインストール、アカウントを設定して受信確認できればOKです。

参考サイト

全てのドメイン宛のメールを受信する - ngの日記.

追記1

Mailcatcher for Drupal and other PHP-applications - The simple version.

vagrant mail で検索してたら、MailCatcherという、ruby製のSMTPサーバーが有ることを知りました。 これを使うと、メールを送信した内容がWEBブラウザで簡単に確認できるようになるようです。 PHPの場合は、php.inisendmail_pathを変更するだけで使えるようになるようです。 ※未検証

追記2

試してないけど、synced_folderの書き込めない件は、Vagrantfileの設定のグループを変更するれば出来そう。もしくは、dmode(ディレクトリのパーミッション?)は777になってましたが、fmode(ファイルのパーミッション?)が666なのでそこを変えても出来そうです。 ※未検証