docker-composeとdjangoとpostfixの構築ログ
はじめに
mailホストにubuntu:16.04とpostfixを入れて、
webホストのdjangoからpostfixを利用したい。
Dockerfileでpostfixのインストール
Dockerfileでapt-get install -y postfixにコケる。プロンプトが出るので失敗する。
ENV DEBIAN_FRONTEND noninteractive
をDockerfileに記述したらプロンプトが出なくなった。
送信テスト
コンテナにログイン後、postfix をスタートして
# service postfix start
sendmail
コマンドを使って外部にメールを送信すると届いている(Gmailに送信した)。
# sendmail MY-EMAIL-ADDRESS
From:@
To:MY-EMAIL-ADDRESS
Subject:test-send
test-body
Gmailには /etc/postfix/main.cf の myhostname からのメールだと表示されている。
Django(別ホスト)からの利用
djangoのホストからsend_mailを使って、postfixのホストを利用してメールを送信しようとする。django側にはEMAIL_HOSTとEMAIL_PORTを設定。
しかし送信しようとすると以下のエラー。
SMTPRecipientsRefused at /xxx/
{'[email protected]': (454, b'4.7.1 <[email protected]>: Relay access denied')}
以下を見つける。
エラーのお色直し
/etc/postfix/main.cf の smtpd_relay_restrictions を以下のように変更。
#smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
service postfix reload 後に再度 django 側から send_mail で送信すると以下のエラー。
一見すると同じエラーに見えるが 454 が 554 に変わっている。smtpd_relay_restrictions の変更が影響している。
SMTPRecipientsRefused at /xxx/
{'[email protected]': (554, b'5.7.1 <[email protected]>: Relay access denied')}
SMTPの悩み
Host to Host で web ホストから mail ホストを利用する形になると、ホスト間の認証が必要になる。認証はSMTP認証で、djangoでもEMAIL_HOST_USERとEMAIL_HOST_PASSWORDがSMTP認証用に用意されている。
ホストを二つにしているので認証が必要になるが、ホストを一つにしてしまったら認証が必要なくなるかもしれない。
ホストを一つにする
docker-composeのホストをwebひとつにして、webにpostfixをインストールしてみる。送信だけならそっちのほうが楽かもしれない。
DjangoのEMAIL_HOSTの設定
djangoのEMAIL_HOSTに'localhost'を設定。djangoとpostfixは同じホストにインストールされている。
送信成功
無事にsend_mailが成功した。やはりホストを複数にしていたため、SMTP認証分の手間が増えていたようだ。ホストを一つにしてlocalhostから送信できるようにすると手間が少なくて済んだ。
結論
docker-composeでpostfixを利用したい場合、マルチホストにするとSMTP認証の設定の手間が増える。
シングルホストにするとSMTP認証の設定が必要なくなって構築が少し楽になる。
参考
Author And Source
この問題について(docker-composeとdjangoとpostfixの構築ログ), 我々は、より多くの情報をここで見つけました https://qiita.com/narupo/items/802573b1dbf594384068著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .