[docker-composer] php-fpmのsendmailが使えない問題の解消法

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

こんにちわ。
 

自称きれい好きなのに、部屋が散らかり放題の下駄です。
 

ダメ人間ですね〜。部屋が散らかっていることに効率性は何も感じません。
そして、よくモノが無くなり、捜し物をしているので、年間でモノ探しをしている時間の合計をすると何時間になるのだろうか???
 

そんな僕のようなモノグサな人の御用達ツール「docker-compose」ですが、LAMP設定をした時に、PHPからメールが送信できないという事でハマった人も多いかと思います。
 

ネットでググッても、似たような問題で困っている書き込みが大量に見つかりました。
 

とりあえず、「docker-compose + nginx + php-fpm」の環境で、メールサーバーなどを介さずにそのままphpの機能だけで、メール送信できてしまうようにする方法が、色々調べて、設定して、ようやくできたので、その苦労の結果をブログに残しておきます。

ハマりポイント

まず基本的にdocker-composeを使用して、Dockerfileとymlファイルを使って環境構築する事を前提にしており、好き放題モジュールをインストールできる場合は、今回のやり方はあまり関係がなさそうなので、compose命の人は参考にしてみてください。
 

そんな、docker-composeでは、Dockerfileでapt-getやyumコマンドを使って、イメージOSに入っていないモジュールをインストールする事ができますが、
 

この問題に最初にぶち当たった時に、一番使い慣れている「postfix」をインストールしようとしたんですが、どうしてもインストール中に発生する対話式コマンドが、クリアできず断念。
 

次に、postfixイメージを起動して別OSとして立ち上げてphpからコネクションすればいいかと思ったんですが・・・
phpのsendmail_path設定でのアクセスがどうしてもうまくいかず断念。
 

次に、sendmailモジュールをインストールしてみたところ、対話方式問題は発生しない事がわかったので、ストレートなsendmail設定にしようとしたんですが、conf設定がなかなかうまくいかず、あえなく断念・・・
 

ネットで一番多かったやり方が、ssmtpを利用して構築する方法ですが、何故かssmtpをインストールしようとする場面で、リポジトリに存在しないというエラーが出て、その先に進めなくなり、断念・・・

msmtpで落ち着く・・・

どうやら、ssmtpはサービス名が変更されて「msmtp」という名称になっているという事がわかった。
 

そうとわかれば、下記のようにセットすることで、上手くインストールする事ができた。
 

ちなみに、macのdocker環境で構築していて、~/webフォルダにプログラムを入れて使用しています。
別環境の場合は、volumes設定を書き換えてお使いください。
 

 

web

 

 

 

php74

 

 

 

 

 

 

このプログラムにアクセスすれば、メールが送られてくるはずです。
※自分の使っているメールアドレスに入れ替えて使ってね。

exim4がポイント

実は、msmtpをインストールしているんですが、使っているのは、exim4です。
 

もっとわかりやすくexim4をインストールすればいいだけかとも思ったんですが、同じ設定にしても動かず、msmtpでインストールされるexim4が便利なために、この仕様にしています。
 

もう少しコンパクトになる箇所があることに気がついた人は、こっそり教えてくだされ!!!

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です