【Python】自建sentry后,配置了邮件服务,但是还是收不到验证邮件?

问题描述

我已经在config.yml中配置了邮件服务器

mail.backend: 'smtp'  # Use dummy if you want to disable email entirely

mail.host: 'smtp.exmail.qq.com'

mail.port: 587

mail.username: '×××××××'

mail.password: '×××××××'

mail.use-tls: true

# The email address to send on behalf of

mail.from: '××××××'

而且发送测试邮件,我也收到了

【Python】自建sentry后,配置了邮件服务,但是还是收不到验证邮件?

【Python】自建sentry后,配置了邮件服务,但是还是收不到验证邮件?

但是我在验证邮件部分,却一直收不到邮件

【Python】自建sentry后,配置了邮件服务,但是还是收不到验证邮件?

是我什么地方还没有配置吗?
看了一下smtp service的log

 290 Connecting to gmail-smtp-in.l.google.com [2404:6800:4008:c07::1b]:25 ... failed: Cannot assign requested address

smtp_1 | 290 LOG: MAIN

smtp_1 | 290 H=gmail-smtp-in.l.google.com [2404:6800:4008:c07::1b] Cannot assign requested address

smtp_1 | 290 Connecting to gmail-smtp-in.l.google.com [108.177.97.26]:25 ... failed: Connection timed out (timeout=5m)

smtp_1 | 290 LOG: MAIN

smtp_1 | 290 H=gmail-smtp-in.l.google.com [108.177.97.26] Connection timed out

smtp_1 | 290 Connecting to alt1.gmail-smtp-in.l.google.com [2607:f8b0:4003:c19::1a]:25 ... failed: Cannot assign requested address

smtp_1 | 290 LOG: MAIN

smtp_1 | 290 H=alt1.gmail-smtp-in.l.google.com [2607:f8b0:4003:c19::1a] Cannot assign requested address

smtp_1 | 290 Connecting to alt1.gmail-smtp-in.l.google.com [209.85.235.26]:25 ... failed: Connection timed out (timeout=5m)

smtp_1 | 290 LOG: MAIN

smtp_1 | 290 H=alt1.gmail-smtp-in.l.google.com [209.85.235.26] Connection timed out

smtp_1 | 290 Connecting to alt2.gmail-smtp-in.l.google.com [2607:f8b0:4001:c1d::1b]:25 ... failed: Cannot assign requested address

smtp_1 | 290 LOG: MAIN

smtp_1 | 290 H=alt2.gmail-smtp-in.l.google.com [2607:f8b0:4001:c1d::1b] Cannot assign requested address

smtp_1 | 290 Connecting to alt3.gmail-smtp-in.l.google.com [2607:f8b0:4002:c08::1a]:25 ... failed: Cannot assign requested address

smtp_1 | 290 LOG: MAIN

smtp_1 | 290 H=alt3.gmail-smtp-in.l.google.com [2607:f8b0:4002:c08::1a] Cannot assign requested address

smtp_1 | 290 Connecting to alt4.gmail-smtp-in.l.google.com [2607:f8b0:400d:c0e::1a]:25 ... failed: Cannot assign requested address

smtp_1 | 290 LOG: MAIN

smtp_1 | 290 H=alt4.gmail-smtp-in.l.google.com [2607:f8b0:400d:c0e::1a] Cannot assign requested address

smtp_1 | 289 LOG: MAIN

smtp_1 | 289 == [email protected] R=dnslookup T=remote_smtp defer (99): Cannot assign requested address

回答

其实这个问题,在docker-compose.yml添加环境变量就好了:

version: '3.4'

x-defaults: &defaults

restart: unless-stopped

build: .

depends_on:

- redis

- postgres

- memcached

- smtp

environment:

# Run `docker-compose run web config generate-secret-key`

# to get the SENTRY_SECRET_KEY value.

SENTRY_SECRET_KEY: '[email protected]&9l2)xvxktgr+t-o9%[email protected]=de&27'

SENTRY_MEMCACHED_HOST: memcached

SENTRY_REDIS_HOST: redis

SENTRY_POSTGRES_HOST: postgres

# 这里添加一下

SENTRY_SERVER_EMAIL: 'your_username'

SENTRY_EMAIL_HOST: 'smtp.exmail.qq.com'

SENTRY_EMAIL_PORT: 587

SENTRY_EMAIL_USER: 'your_username'

SENTRY_EMAIL_PASSWORD: '********'

SENTRY_EMAIL_USE_TLS: 'true'

....

我发现,发送验证邮件和异常的通知邮件,都是通过worker这个Service

以下答案不是最新的,但是体现了我解决的过程

我昨天认真的看了一下日志,发现验证邮件是通过smtp这个Service发送的,然后我看了它的日志:

smtp_1       |   290 LOG: MAIN

smtp_1 | 290 H=gmail-smtp-in.l.google.com [2404:6800:4008:c07::1b] Cannot assign requested address

smtp_1 | 290 Connecting to gmail-smtp-in.l.google.com [108.177.97.26]:25 ... failed: Connection timed out (timeout=5m)

smtp_1 | 290 LOG: MAIN

smtp_1 | 290 H=gmail-smtp-in.l.google.com [108.177.97.26] Connection timed out

smtp_1 | 290 Connecting to alt1.gmail-smtp-in.l.google.com [2607:f8b0:4003:c19::1a]:25 ... failed: Cannot assign requested address

发现这个服务并没有去使用config.yml中的配置,因为我配置的smtp server是腾讯的smtp.exmail.qq.com,端口为587
我已经在web这个Service添加了挂载了

web:

<<: *defaults

ports:

- '127.0.0.1:9000:9000'

volumes:

- ./config.yml:/etc/sentry/config.yml

web这个Service,也就是使用的web界面,是正确读取了配置了,那说明问题在于smtp这个Service。
我看了一下它的镜像,是使用tianon/exim4这个镜像,它的入口shell

#!/bin/bash

set -e

opts=(

dc_local_interfaces '0.0.0.0 ; ::0'

dc_other_hostnames ''

dc_relay_nets '0.0.0.0/0'

)

if [ "$GMAIL_USER" -a "$GMAIL_PASSWORD" ]; then

# see https://wiki.debian.org/GmailAndExim4

opts+=(

dc_eximconfig_configtype 'smarthost'

dc_smarthost 'smtp.gmail.com::587'

)

echo "*.google.com:$GMAIL_USER:$GMAIL_PASSWORD" > /etc/exim4/passwd.client

else

opts+=(

dc_eximconfig_configtype 'internet'

)

fi

set-exim4-update-conf "${opts[@]}"

if [ "$(id -u)" = '0' ]; then

mkdir -p /var/spool/exim4 /var/log/exim4 || :

chown -R Debian-exim:Debian-exim /var/spool/exim4 /var/log/exim4 || :

fi

exec "[email protected]"

查询了一下,这个镜像是使用debian上的Exim4来发送邮件的,它的一些配置

dc_eximconfig_configtype='internet'

dc_other_hostnames=''

dc_local_interfaces='127.0.0.1'

dc_readhost=''

dc_relay_domains=''

dc_minimaldns='false'

dc_relay_nets=''

dc_smarthost=''

CFILEMODE='644'

dc_use_split_config='false'

dc_hide_mailname=''

dc_mailname_in_oh='true'

dc_localdelivery='maildir_home'

dc_eximconfig_configtype这个参数,写了internet的话,smtp是自动去查询出来的,所以smtp server的日志里,才会去使用google的smtp server,如果你要写固定的配置的话,你应该把dc_eximconfig_configtype协成smarthost,然后配置dc_smarthost为你的smtp server,注意里头是两个冒号,另外还需要把对应的账号密码写到/etc/exim4/passwd.client这个口令文件中,如

*.google.com:your_user_name:your_password

.google.com之前的只是一个通配,其实这些事从这段shell也看出来了

if [ "$GMAIL_USER" -a "$GMAIL_PASSWORD" ]; then

# see https://wiki.debian.org/GmailAndExim4

opts+=(

dc_eximconfig_configtype 'smarthost'

dc_smarthost 'smtp.gmail.com::587'

)

echo "*.google.com:$GMAIL_USER:$GMAIL_PASSWORD" > /etc/exim4/passwd.client

else

所有,我目前临时解决了一下,就是把这个docker-entrypoint.sh给改了,挂载到容器里去,记得要赋x权限,
最好的方法应该是把这个镜像改改,能识别一下环境变量

看下sentry系统监控内有没有报错

没有验证邮箱的时候也可以接收邮件通知,具体配置看这里

【Python】自建sentry后,配置了邮件服务,但是还是收不到验证邮件?

以上是 【Python】自建sentry后,配置了邮件服务,但是还是收不到验证邮件? 的全部内容, 来源链接: utcz.com/a/78503.html

回到顶部