harumaki.net

インフラ屋の覚書や、ラーメン食べある記とか。

MAIL postfix python redash

[redash] メール通知設定の追加(redashAMI限定)

投稿日:2018年3月28日

redashへ、パスワードリセット時のリマインダメール通知を有効にするため、メール周りの設定を追加。
(googleアカウントと連携していない環境でのメモです)

参考:

Redash: Mail Configuration
StackOverflow: SMTP AUTH extension not supported by server

環境はAWS EC2にてredash用のAMIを利用。
redash AMIを使う場合は通常のsupervisor環境となり、docker環境での実行ではないので、ご注意!

AMI redash-2-0-0-b2990-ap-northeast-1 (ami-fde8199b)
OS Ubuntu

▼1.設定

/etc/postfix/main.cf

ここは普通に変更。ローカルから送信するだけなので”inet_interfaces = localhost”、IPv6は使わないので”inet_protocols = ipv4″へ変更。

< myhostname = ip-10-10-10-10.ap-northeast-1.compute.internal --- > #myhostname = ip-10-10-10-10.ap-northeast-1.compute.internal
> myhostname = mail.example.com
> mydomain = example.com

< myorigin = /etc/mailname
< mydestination = $myhostname, ip-10-10-10-10.ap-northeast-1.compute.internal, localhost.ap-northeast-1.compute.internal, localhost --- > myorigin = $mydomain
> mydestination = $myhostname, mail.example.com, localhost.ap-northeast-1.compute.internal, localhost

< inet_interfaces = all
< inet_protocols = all --- > inet_interfaces = localhost
> inet_protocols = ipv4

/opt/redash/.env

こちらは、/opt/redash/current/redash/settings.py にデフォルト値があるので
ホスト名やユーザー名のみ設定値を入力。

参考用:settings.pyの設定値

149 # Mail settings:
150 MAIL_SERVER = os.environ.get('REDASH_MAIL_SERVER', 'localhost')
151 MAIL_PORT = int(os.environ.get('REDASH_MAIL_PORT', 25))
152 MAIL_USE_TLS = parse_boolean(os.environ.get('REDASH_MAIL_USE_TLS', 'false'))
153 MAIL_USE_SSL = parse_boolean(os.environ.get('REDASH_MAIL_USE_SSL', 'false'))
154 MAIL_USERNAME = os.environ.get('REDASH_MAIL_USERNAME', None)
155 MAIL_PASSWORD = os.environ.get('REDASH_MAIL_PASSWORD', None)
156 MAIL_DEFAULT_SENDER = os.environ.get('REDASH_MAIL_DEFAULT_SENDER', None)
157 MAIL_MAX_EMAILS = os.environ.get('REDASH_MAIL_MAX_EMAILS', None)
158 MAIL_ASCII_ATTACHMENTS = parse_boolean(os.environ.get('REDASH_MAIL_ASCII_ATTACHMENTS', 'false'))
159
160 HOST = os.environ.get('REDASH_HOST', '')

/opt/redash/.env への設定値

export REDASH_MAIL_SERVER=""
export REDASH_MAIL_PORT=""
export REDASH_MAIL_USE_TLS=""
export REDASH_MAIL_USE_SSL=""
export REDASH_MAIL_USERNAME=""
export REDASH_MAIL_PASSWORD=""
export REDASH_MAIL_DEFAULT_SENDER="[email protected]"
export REDASH_HOST="https://redash.example.com/"

▼2.設定適用・デーモン再起動

上記の.envとmain.cfの変更後、supervisorとpostfixデーモンをrestart。

– postfix

$ sudo /etc/init.d/postfix restart

– supervisor

$ sudo supervisorctl restart all

→celeryもredash_serverもまとめて再起動。

▼3.エラー発生

しかし、エラーが発生。
ログは/var/log/supervisor/redash_celery-stderr—supervisor-*****.logから抜粋。

ValueError: Couldn't import u'redash.worker': invalid literal for int() with base 10: ''
Traceback (most recent call last):
File "/usr/local/bin/celery", line 11, in
sys.exit(main())
File "/usr/local/lib/python2.7/dist-packages/celery/__main__.py", line 30, in main
main()
File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 81, in main
cmd.execute_from_commandline(argv)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 793, in execute_from_commandline
super(CeleryCommand, self).execute_from_commandline(argv)))
File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 309, in execute_from_commandline
argv = self.setup_app_from_commandline(argv)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 469, in setup_app_from_commandline
self.app = self.find_app(app)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 489, in find_app
return find_app(app, symbol_by_name=self.symbol_by_name)
File "/usr/local/lib/python2.7/dist-packages/celery/app/utils.py", line 235, in find_app
sym = symbol_by_name(app, imp=imp)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 492, in symbol_by_name
return symbol_by_name(name, imp=imp)
File "/usr/local/lib/python2.7/dist-packages/kombu/utils/__init__.py", line 100, in symbol_by_name
sys.exc_info()[2])
File "/usr/local/lib/python2.7/dist-packages/kombu/utils/__init__.py", line 96, in symbol_by_name
module = imp(module_name, package=package, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery/utils/imports.py", line 101, in import_from_cwd
return imp(module, package=package)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/opt/redash/redash.2.0.0.b2990/redash/__init__.py", line 16, in
from redash import settings
File "/opt/redash/redash.2.0.0.b2990/redash/settings.py", line 151, in
MAIL_PORT = int(os.environ.get('REDASH_MAIL_PORT', 25))

確認したところ、/opt/redash/.envへ設定した変数に明示的に値を入れる必要がありそう。
(もしかしてsetting.pyのデフォルト値が反映されてない??)
ということで設定変更。

▼4.設定修正(環境変数ファイル)

/opt/redash/.env を以下の通り変更

export REDASH_MAIL_SERVER="localhost"
export REDASH_MAIL_PORT="25"
export REDASH_MAIL_USE_TLS="false"
export REDASH_MAIL_USE_SSL="false"
export REDASH_MAIL_USERNAME="None"
export REDASH_MAIL_PASSWORD="None"
export REDASH_MAIL_DEFAULT_SENDER="[email protected]"
export REDASH_HOST="https://redash.example.com/"

上記を適用するため、supervisorを再起動。
その後、確認するも、今度はpostfix側でエラー。

▼5.設定変更後のエラー

[2018-03-27 03:28:52,914: ERROR/Worker-4] redash.tasks.send_mail[d3fe6491-ca63-4b6b-aabc-9847984bf0cc]: Failed sending message: Reset your password
Traceback (most recent call last):
File "/opt/redash/redash.2.0.0.b2990/redash/tasks/general.py", line 57, in send_mail
mail.send(message)
File "/usr/local/lib/python2.7/dist-packages/flask_mail.py", line 491, in send
with self.connect() as connection:
File "/usr/local/lib/python2.7/dist-packages/flask_mail.py", line 144, in __enter__
self.host = self.configure_host()
File "/usr/local/lib/python2.7/dist-packages/flask_mail.py", line 165, in configure_host
host.login(self.mail.username, self.mail.password)
File "/usr/lib/python2.7/smtplib.py", line 585, in login
raise SMTPException("SMTP AUTH extension not supported by server.")
SMTPException: SMTP AUTH extension not supported by server.

↓この部分がよく分からなかったが…

raise SMTPException("SMTP AUTH extension not supported by server.")
SMTPException: SMTP AUTH extension not supported by server.

main.cfをよく見たところ、redash AMIのpostfixはデフォルトでTLS有効、SMTP認証有効となっていたので
ここをひとまず無効にすることに。
よく考えたらredash(python)側では”REDASH_MAIL_USE_TLS=”false””にしているので、そりゃエラー出ますね、と。

▼6.設定を再度修正

/etc/postfix/main.cf 設定変更

smtp認証とTLSを無効に。

23c23,24

< smtpd_use_tls=yes --- > #smtpd_use_tls=yes
> smtpd_use_tls=no
30,31c31,34
< smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination --- > #smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

/opt/redash/.env 設定変更

SMTP認証を無効にしたので、redash側の変数”REDASH_MAIL_USERNAME”と”REDASH_MAIL_PASSWORD”も無効に。

export REDASH_MAIL_SERVER="localhost"
export REDASH_MAIL_PORT="25"
export REDASH_MAIL_USE_TLS="false"
export REDASH_MAIL_USE_SSL="false"
# export REDASH_MAIL_USERNAME="None"
# export REDASH_MAIL_PASSWORD="None"
export REDASH_MAIL_DEFAULT_SENDER="[email protected]"
export REDASH_HOST="https://redash.example.com/"

上記で設定後、postfixおよびsupervisorを再起動し、配信成功。

Mar 27 03:46:17 ip-10-10-10-10 postfix/smtpd[5890]: connect from localhost[127.0.0.1]
Mar 27 03:46:17 ip-10-10-10-10 postfix/smtpd[5890]: 3A7C413BD68: client=localhost[127.0.0.1]
Mar 27 03:46:17 ip-10-10-10-10 postfix/cleanup[5893]: 3A7C413BD68: message-id=<15********20.5**3.2****************[email protected]>
Mar 27 03:46:17 ip-10-10-10-10 postfix/qmgr[5888]: 3A7C413BD68: from=<[email protected]>, size=14586, nrcpt=1 (queue active)
Mar 27 03:46:17 ip-10-10-10-10 postfix/smtpd[5890]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Mar 27 03:46:18 ip-10-10-10-10 postfix/smtp[5894]: 3A7C413BD68: to=<[email protected]>, relay=mail.example.net[203.0.113.128]:25, delay=1.3, delays=0.01/0.01/0.56/0.7, dsn=2.0.0, status=sent (250 2.0.0 OK 1522122378 z2si221288pfh.195 - gsmtp)
Mar 27 03:46:18 ip-10-10-10-10 postfix/qmgr[5888]: 3A7C413BD68: removed

▼7.まとめ:

  • redashの環境変数ファイル /opt/redash/.env には明示的に変数を入れること
  • postfixのTLS、SMTP認証は事前に確認して合わせましょう
    今回はEC2のredash AMIを使い、かつローカル配信だけなので無効にしてしまったが、本来なら有効にしておくのが適切です。

-MAIL, postfix, python, redash
-, ,

執筆者:


comment

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

CAPTCHA


関連記事

no image

[メモ]FreeBSDでsendmail→postfixへの切り替え

FreeBSDでのsendmail→postfix切り替えの作業ログ。 お客さんの会社で、長らく管理人不在のまま使用していたFreeBSDのWebサーバーでハードウェア障害が起き、バックアップもないま …

no image

courier-mta+phpcourier

courier-mta+phpcourier 参照サイト 構築環境 パッケージのビルドとインストール 環境設定[初期設定] 設定DBの更新 デーモン設定 Maildir設定 phpcourierのイン …

no image

MailScannerインストール

MailScannerインストール ダウンロードとインストール 初期設定 postfix mailscanner 起動 動作確認 カスタマイズ スキャン時のメール送信設定 運用 メール通知 ログの出力 …

no image

postfix + pop before SMTP

▼dracインストールとローカルでの動作確認 2004/10/20 dracはpop before SMTPを実装するためのアプリです。 といっても、この後SMTP-authへ変更してしまいましたが… …

no image

postfixadminでのメールサーバー構築

メールサーバ構築テスト4.postfixadmin † 2006-03-01 会社のメールサーバーの再構築のための検証として、いろいろと。 メールサーバ構築テスト4.postfixadm …