Web系(に関わらず)をやってるとほぼ必ずでてくるメール関連の実装とかテストとか。
その場合に、ローカル環境で送信テストしたい、と思ってもOBP25Blockingとかあってメール送信が通常出来ない。
OBP25 Blocking
スパムメールとか意図しない大量メールの送信(ウィルス感染などによるものとか)を防ぐため、
一般のプロバイダは会員自前のメールサーバーから外部SMTPサーバーへの接続(ポート25向け)をブロックする。
このため、いくらmacにPostfixを入れようが外部にメール送信はできない。
ここでよく出てくるのはGmailとかを中継させてローカルでも外部にメール送信できるようにする方法。
けどこれって結構手順が多くて大変…
しかもバージョン変われば設定ファイルが変わるときもあるので、さらに煩雑に…
ということで、外部にメール送信をあきらめて、localhost宛のメールのみ扱おうじゃないか、というのが動機。
Postfixをインストールしただけだと、外部メールアドレスに送れないけど、(アカウント名)@localhostというアドレスにはメールが送れる。
(メールアドレスのバリデーションには通らない場合もあるが、それは別の話)
ここでのアカウント名はmacにログインしている(登録されている)ユーザー名を使う。
では送信テスト
(Postfixはbrewとかportとかでインストールしておく、設定は特にいじらない)
mail account_name@localhost
Subject: test mail
body here
.
でターミナルを開くと、「メールが来てるよ」みたいなのが出るはず。
出ていたらmailコマンドでメールを確認しよう。
ちゃんと来ていればOK
Postfixのデフォルト設定だとmbox形式(1つのファイルにいろんなメールが入る)になっているので、これはMaildir形式に変更しておく。
401 # DELIVERY TO MAILBOX
402 #
403 # The home_mailbox parameter specifies the optional pathname of a
404 # mailbox file relative to a user's home directory. The default
405 # mailbox file is /var/spool/mail/user or /var/mail/user. Specify
406 # "Maildir/" for qmail-style delivery (the / is required).
407 #
408 #home_mailbox = Mailbox
409 home_mailbox = Maildir/
(バージョンにより場所は異なるので、検索とかで探す)
409行目の設定を加えた。(説明に書いてある通り、スラッシュ必要)
これでPostfixを再起動させれば自分のホームフォルダにMaildirというフォルダができるはず。
(mboxというファイルは使わないので削除でOK)
Postfix側はこれでOK、次はDovecotの設定に移る。
Postfixと同じく、brewやportでDovecotをインストールしておく。
あとインストール後はDovecotの設定ファイルがないので、
/usr/local/Cellar/dovecot/2.3.1/share/doc/dovecot/example-config
のフォルダ(brewの場合、もちろんバージョン値は異なる場合あり)から
dovecot.conf
とconf.d
フォルダをまるごと/usr/local/etc/dovecot/
にコピーする。
Dovecotの設定はちょっといじる必要あり。
以下
# protocols = imap imaps pop3 pop3s
protocols = pop3
まぁどうせローカルだし、popしかいらない、ってことでprotocolsの部分を書き換える。
次はメールの場所の指定
mail_location = maildir:~/Maildir
(postfixをmbox形式のままで、DovecotもMbox形式の設定にしてもどうも上手くいかなかった。なのでMaildir形式に変更している)
SSLは使わないので
ssl = no
...
# ssl_cert = </etc/ssl/certs/dovecot.pem
# ssl_key = </etc/ssl/private/dovecot.pem
SSL関係はコメントアウト(ここはdovecotを起動すればエラーと言われる部分なので忘れてても気付く)
Dovecotを動かすユーザー関連
default_login_user = _dovenull
default_internal_user = _dovecot
を追記、macだとデーモン系のユーザーは前にアンダーバーがつくそうな。
このままだとmacにあるユーザーアカウント情報でDovecotにログインできないので、もう一手間
10 passdb {
11 driver = pam
12 # [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>]
13 # [cache_key=<key>] [<service name>]
14 #args = dovecot
15 args = login << 追加
16 }
15行目の部分を追加すればmacのユーザー情報でログインできるそう。
ここまでやればだいたいOK(なはず)
あとはsudo dovecot start
で開始。
(launchdとかに登録する方法もあるがこれもややこしいので割愛、というかやってない)
これで問題なく起動していれば、あとはmacのメールアプリでアカウントを追加
アカウント名はログインユーザーで、パスワードはログインパスワード
設定が終われば、ちゃんとメールを受信できるかテストを行う。
問題なければこれで終了。
PCを再起動したりしたときは、dovecot start
を忘れないように。
なお、当然ながらusername@localhostというメールアドレスにはgmailとかyahooとか外部のメールからは送信できない。
あくまで、完全ローカル環境のみ有効なアドレスであることをお忘れなく。