はじめに
私物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
というファイルが設定ファイルです。
こいつに編集を加えていきます。
上記のサイトから編集箇所を引用させて頂きます。
引用注: 下記の項目を検索して、都度下記のように書き換えていきます。
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/
※もちろん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はわざわざ入れてくれているのか。。。?