postfixでのメール送信環境を自力構築する


はじめに

 私物WindowsPCでのHyper-V+DockerでのPHP開発環境構築がうまくいったので、業務で使っているMacの開発環境もVagrantからDockerに移行させようと画策していました。
私物PCでのHyper-V+Docker環境構築で散々苦しめられたので、構築そのものは全然楽だったのですが。。

 なんとDocker公式のCentOS7イメージにはsendmailはおろかpostfixも入っていない!!
Vagrantには入っていたのに!!
PHPMailerのsend()が失敗するので、なんでだろうとログを調べてみて判明したことでした。

というわけで、postfixでのメール送信環境(受信は今回やらない)構築のまとめを。
…sendmailは面倒そうなので、postfixで。。

一応Dockerタグ付けてはいますが、Dockerに限らず汎用的に使えるかと思います。

※以下はCentOS7を前提とします。

postfix導入まで

http://www.unix-power.net/centos7/postfix.html
めちゃくちゃここにお世話になりました。

インストール

作業ユーザーはもちろんroot。
docker execしてる場合は最初からrootかと思います。

標準リポジトリからinstall可能なので、yum install。

# yum -y install postfix

# ls /etc/ | grep postfixしてpostfixが表示されていればインストール完了。
インストール完了したかどうかの確認には、# rpm -qa | grep postfixの方が良いですね。
ご指摘頂いた@miyuさん、有難うございます。

設定

 /etc/postfix/にあるmain.cfというファイルが設定ファイルです。
こいつに編集を加えていきます。

上記のサイトから編集箇所を引用させて頂きます。
引用注: 下記の項目を検索して、都度下記のように書き換えていきます。

/etc/postfix/main.cf
myhostname = mail.unix-power.net
mydomain = unix-power.net
myorigin = $myhostname
#inet_interfaces = localhost
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.0.0/16, 127.0.0.1
home_mailbox = Maildir/

引用元: http://www.unix-power.net/centos7/postfix.html

※もちろんmyhostnameや、mydomainなどは自分の値に書き換えてあげてください。
自分の場合は、私物で持っているドメインを設定してみました。

 smtpd_recipient_restrictionsは、既存のmain.cfには記載がありません。
ただ、明示的に設定しなくても、上記サイトに掲載されているルールが適用されるらしいので、今回は記載しませんでした。

ディレクトリの作成

メールの保存形式はMaildir形式が主流です。
Maildir形式では各ユーザのホームディレクトリに1通づつメールが溜まっていきます。
引用元: http://www.unix-power.net/centos7/postfix.html

ということなので、指定のフォルダを作成します。

# mkdir -p /etc/skel/Maildir/{new,cur,tmp}
# chmod -R 700 /etc/skel/Maildir/

postfixを有効化して開始する

# systemctl enable postfix
# systemctl start postfix

テスト送信

 ここまでで送信自体は出来るようになっているはずなので、テスト送信をしてみます。
※ちなみに、Dockerの場合は予め25番ポートをexposeしておきます。

# sendmail 送信先メールアドレス

そうすると、#が消えて自由入力になります。
FromやToなどを設定します。

From: 送信元として設定したいメールアドレス
To: メールを送信したい先のメールアドレス
Subject: 件名
本文
本文
.

最終行の.を入力しEnterすると、メールが送信されます。
(.を打つまではメールの本文を入力出来る)

これが成功していれば、PHPMailerもちゃんと動きます。(確認済み)

最後に

 postfixやsendmailがそもそもCentOSの標準機能だと思っていたので、結構メール送信1つ取っても大変なのだと思いました。。。
Vagrantはわざわざ入れてくれているのか。。。?