首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试通过SMTP发送邮件时出现mail错误

问尝试通过SMTP发送邮件时出现mail错误
EN

Stack Overflow用户
提问于 2021-07-30 07:57:40
回答 1查看 53关注 0票数 0

我正在通过Python向我们的客户发送邮件,但最近我在我们的生产环境中收到了一些错误消息:

代码语言:javascript
复制
intranet-worker     | mksp-worker  2021-07-30 07:49:39,693 INFO  mails.py:setup_mailserver Logging in to mail server "smtp.strato.de"
intranet-worker     | 07:49:39:   0.01s ! d8730ffa0ce644de9d5595cbe13290c8:send_welcome_mail failed, gaierror: [Errno -2] Name or service not known
intranet-worker     | Traceback (most recent call last):
intranet-worker     |   File "/usr/local/lib/python3.8/site-packages/arq/worker.py", line 525, in run_job
intranet-worker     |     result = await task
intranet-worker     |   File "/app/tasks/mails.py", line 106, in send_welcome_mail
intranet-worker     |     return await send_mail_to(user.email, tpl, values)
intranet-worker     |   File "/app/tasks/mails.py", line 50, in send_mail_to
intranet-worker     |     mail_server = await setup_mailserver()
intranet-worker     |   File "/app/tasks/mails.py", line 20, in setup_mailserver
intranet-worker     |     mail_server = smtplib.SMTP_SSL(settings.smtp_server, settings.smtp_port)
intranet-worker     |   File "/usr/local/lib/python3.8/smtplib.py", line 1034, in __init__
intranet-worker     |     SMTP.__init__(self, host, port, local_hostname, timeout,
intranet-worker     |   File "/usr/local/lib/python3.8/smtplib.py", line 253, in __init__
intranet-worker     |     (code, msg) = self.connect(host, port)
intranet-worker     |   File "/usr/local/lib/python3.8/smtplib.py", line 339, in connect
intranet-worker     |     self.sock = self._get_socket(host, port, self.timeout)
intranet-worker     |   File "/usr/local/lib/python3.8/smtplib.py", line 1040, in _get_socket
intranet-worker     |     new_socket = socket.create_connection((host, port), timeout,
intranet-worker     |   File "/usr/local/lib/python3.8/socket.py", line 787, in create_connection
intranet-worker     |     for res in getaddrinfo(host, port, 0, SOCK_STREAM):
intranet-worker     |   File "/usr/local/lib/python3.8/socket.py", line 918, in getaddrinfo
intranet-worker     |     for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
intranet-worker     | socket.gaierror: [Errno -2] Name or service not known

代码就像这样简单:

代码语言:javascript
复制
async def setup_mailserver():
    log.info('Logging in to mail server %s' % settings.smtp_server)
    log.debug('Going to use username %s for authentication' % settings.smtp_username)
    try:
        mail_server = smtplib.SMTP_SSL(settings.smtp_server, settings.smtp_port)
        mail_server.login(settings.smtp_username, settings.smtp_password)
        return mail_server

值settings.smtp_server为smtp.strato.de,错误消息正上方的日志记录输出证明了这一点。有趣的是:在本地运行它,它工作得很好。在我们的dev和stage集群中运行它,它工作得非常好。此错误仅在我们的生产环境中发生。主要区别在于dev和staging都运行在Azure Kubernetes上,而prod运行在普通的Linux服务器上,使用docker-compose。不过,它使用的是相同的图像。

当我在容器中得到一个bash时,我可以很高兴地解析并ping smtp.strato.de

代码语言:javascript
复制
[user@hostname docker]$ docker-compose exec intranet-worker bash
root@cef64049ef54:/app# ping smtp.strato.de
PING smtp.strato.de (81.169.145.133) 56(84) bytes of data.
64 bytes from smtp.strato.de (81.169.145.133): icmp_seq=1 ttl=246 time=20.1 ms
64 bytes from smtp.strato.de (81.169.145.133): icmp_seq=2 ttl=246 time=20.2 ms
^C
--- smtp.strato.de ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 20.113/20.169/20.226/0.152 ms

在同一个容器中的同一个应用程序中,我也在向外部API发出请求,这些API也是DNS解析的,它们工作得很好。我完全不知道是什么导致了这个错误,我非常感谢大家的支持。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-07-30 09:16:49

在此日志行中有一个小提示:

代码语言:javascript
复制
intranet-worker     | mksp-worker  2021-07-30 07:49:39,693 INFO  mails.py:setup_mailserver Logging in to mail server "smtp.strato.de"

特别要注意"smtp.strato.de",它包含引号。实际上,我在docker-compose.yml文件中的SMTP值两边有引号,如下所示:

代码语言:javascript
复制
    - SMTP_SERVER="smtp.strato.de"

删除引号可以使代码按预期工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68587371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档