我目前正在尝试让 Flask-Mail 在 heroku 上工作,但一直遇到各种问题。
一般代码是这样的:
from threading import Thread
from flask import render_template, current_app
from flask_mail import Message
from app import mail
def send_async_email(app, msg):
with app.app_context():
mail.send(msg)
print("message sent)
def send_email(subject, sender, recipients, text_body, html_body):
msg = Message(subject, sender=sender, recipients=recipients)
msg.body = text_body
msg.html = html_body
Thread(target=send_async_email, args=(current_app._get_current_object(), msg)).start()
差不多是这样: https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-x-email-support
现在我的问题似乎是当我在 heroku 上运行它时。 在我的机器/开发环境中,代码运行良好,我得到了“已发送消息”打印语句,虽然我的收件箱中没有收到电子邮件,但这很好,它执行时没有错误,我可以解决缺少电子邮件的问题在我设法让它在 Heroku 上以与在我的开发机器上相同的方式执行之后到达..
当我在 Heroku 上运行相同的代码时,我在日志中收到以下消息:
2021-04-06T10:14:41.736652+00:00 app[web.1]: Exception in thread Thread-2:
2021-04-06T10:14:41.736661+00:00 app[web.1]: Traceback (most recent call last):
2021-04-06T10:14:41.736662+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 425, in resolve
2021-04-06T10:14:41.736662+00:00 app[web.1]: use_network=use_network)
2021-04-06T10:14:41.736663+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 380, in query
2021-04-06T10:14:41.736663+00:00 app[web.1]: return end()
2021-04-06T10:14:41.736664+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 359, in end
2021-04-06T10:14:41.736664+00:00 app[web.1]: raise result[1]
2021-04-06T10:14:41.736664+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 340, in step
2021-04-06T10:14:41.736665+00:00 app[web.1]: a = fun(*args, **kwargs)
2021-04-06T10:14:41.736665+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/dns/resolver.py", line 1091, in query
2021-04-06T10:14:41.736666+00:00 app[web.1]: True)
2021-04-06T10:14:41.736667+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/dns/resolver.py", line 1043, in resolve
2021-04-06T10:14:41.736667+00:00 app[web.1]: timeout = self._compute_timeout(start, lifetime)
2021-04-06T10:14:41.736668+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/dns/resolver.py", line 950, in _compute_timeout
2021-04-06T10:14:41.736668+00:00 app[web.1]: raise Timeout(timeout=duration)
**2021-04-06T10:14:41.736668+00:00 app[web.1]: dns.exception.Timeout: The DNS operation timed out after 5.107004642486572 seconds**
2021-04-06T10:14:41.736669+00:00 app[web.1]:
2021-04-06T10:14:41.736669+00:00 app[web.1]: During handling of the above exception, another exception occurred:
2021-04-06T10:14:41.736670+00:00 app[web.1]:
2021-04-06T10:14:41.736670+00:00 app[web.1]: Traceback (most recent call last):
2021-04-06T10:14:41.736671+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/threading.py", line 916, in _bootstrap_inner
2021-04-06T10:14:41.736671+00:00 app[web.1]: self.run()
2021-04-06T10:14:41.736672+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/threading.py", line 864, in run
2021-04-06T10:14:41.736672+00:00 app[web.1]: self._target(*self._args, **self._kwargs)
2021-04-06T10:14:41.736672+00:00 app[web.1]: File "/app/app/email.py", line 9, in send_async_email
2021-04-06T10:14:41.736673+00:00 app[web.1]: mail.send(msg)
2021-04-06T10:14:41.736673+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_mail.py", line 491, in send
2021-04-06T10:14:41.736674+00:00 app[web.1]: with self.connect() as connection:
2021-04-06T10:14:41.736674+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_mail.py", line 144, in __enter__
2021-04-06T10:14:41.736675+00:00 app[web.1]: self.host = self.configure_host()
2021-04-06T10:14:41.736675+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_mail.py", line 158, in configure_host
2021-04-06T10:14:41.736675+00:00 app[web.1]: host = smtplib.SMTP(self.mail.server, self.mail.port)
2021-04-06T10:14:41.736676+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/smtplib.py", line 251, in __init__
2021-04-06T10:14:41.736676+00:00 app[web.1]: (code, msg) = self.connect(host, port)
2021-04-06T10:14:41.736677+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/smtplib.py", line 336, in connect
2021-04-06T10:14:41.736677+00:00 app[web.1]: self.sock = self._get_socket(host, port, self.timeout)
2021-04-06T10:14:41.736678+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/smtplib.py", line 307, in _get_socket
2021-04-06T10:14:41.736678+00:00 app[web.1]: self.source_address)
2021-04-06T10:14:41.736679+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/green/socket.py", line 44, in create_connection
2021-04-06T10:14:41.736679+00:00 app[web.1]: for res in getaddrinfo(host, port, 0, SOCK_STREAM):
2021-04-06T10:14:41.736680+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 517, in getaddrinfo
2021-04-06T10:14:41.736680+00:00 app[web.1]: qname, addrs = _getaddrinfo_lookup(host, family, flags)
2021-04-06T10:14:41.736681+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 490, in _getaddrinfo_lookup
2021-04-06T10:14:41.736682+00:00 app[web.1]: raise err
2021-04-06T10:14:41.736682+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 479, in _getaddrinfo_lookup
2021-04-06T10:14:41.736682+00:00 app[web.1]: answer = resolve(host, qfamily, False, use_network=use_network)
2021-04-06T10:14:41.736683+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 432, in resolve
2021-04-06T10:14:41.736683+00:00 app[web.1]: raise EAI_EAGAIN_ERROR
2021-04-06T10:14:41.736684+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 479, in _getaddrinfo_lookup
2021-04-06T10:14:41.736684+00:00 app[web.1]: answer = resolve(host, qfamily, False, use_network=use_network)
2021-04-06T10:14:41.736685+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 432, in resolve
2021-04-06T10:14:41.736685+00:00 app[web.1]: raise EAI_EAGAIN_ERROR
2021-04-06T10:14:41.736685+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/threading.py", line 916, in _bootstrap_inner
2021-04-06T10:14:41.736686+00:00 app[web.1]: self.run()
2021-04-06T10:14:41.736686+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/threading.py", line 864, in run
2021-04-06T10:14:41.736687+00:00 app[web.1]: self._target(*self._args, **self._kwargs)
2021-04-06T10:14:41.736687+00:00 app[web.1]: File "/app/app/email.py", line 9, in send_async_email
2021-04-06T10:14:41.736688+00:00 app[web.1]: mail.send(msg)
2021-04-06T10:14:41.736688+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_mail.py", line 491, in send
2021-04-06T10:14:41.736688+00:00 app[web.1]: with self.connect() as connection:
2021-04-06T10:14:41.736689+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_mail.py", line 144, in __enter__
2021-04-06T10:14:41.736689+00:00 app[web.1]: self.host = self.configure_host()
2021-04-06T10:14:41.736689+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_mail.py", line 158, in configure_host
2021-04-06T10:14:41.736690+00:00 app[web.1]: host = smtplib.SMTP(self.mail.server, self.mail.port)
2021-04-06T10:14:41.736697+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/smtplib.py", line 251, in __init__
2021-04-06T10:14:41.736697+00:00 app[web.1]: (code, msg) = self.connect(host, port)
2021-04-06T10:14:41.736698+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/smtplib.py", line 336, in connect
2021-04-06T10:14:41.736698+00:00 app[web.1]: self.sock = self._get_socket(host, port, self.timeout)
2021-04-06T10:14:41.736698+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/smtplib.py", line 307, in _get_socket
2021-04-06T10:14:41.736699+00:00 app[web.1]: self.source_address)
2021-04-06T10:14:41.736699+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/green/socket.py", line 44, in create_connection
2021-04-06T10:14:41.736700+00:00 app[web.1]: for res in getaddrinfo(host, port, 0, SOCK_STREAM):
2021-04-06T10:14:41.736700+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 517, in getaddrinfo
2021-04-06T10:14:41.736701+00:00 app[web.1]: qname, addrs = _getaddrinfo_lookup(host, family, flags)
2021-04-06T10:14:41.736701+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 490, in _getaddrinfo_lookup
2021-04-06T10:14:41.736701+00:00 app[web.1]: raise err
2021-04-06T10:14:41.736720+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 479, in _getaddrinfo_lookup
2021-04-06T10:14:41.736721+00:00 app[web.1]: answer = resolve(host, qfamily, False, use_network=use_network)
2021-04-06T10:14:41.736722+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 432, in resolve
2021-04-06T10:14:41.736722+00:00 app[web.1]: raise EAI_EAGAIN_ERROR
2021-04-06T10:14:41.736722+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 479, in _getaddrinfo_lookup
2021-04-06T10:14:41.736723+00:00 app[web.1]: answer = resolve(host, qfamily, False, use_network=use_network)
2021-04-06T10:14:41.736723+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 432, in resolve
2021-04-06T10:14:41.736723+00:00 app[web.1]: raise EAI_EAGAIN_ERROR
2021-04-06T10:14:41.736724+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/threading.py", line 916, in _bootstrap_inner
2021-04-06T10:14:41.736724+00:00 app[web.1]: self.run()
2021-04-06T10:14:41.736725+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/threading.py", line 864, in run
2021-04-06T10:14:41.736725+00:00 app[web.1]: self._target(*self._args, **self._kwargs)
2021-04-06T10:14:41.736725+00:00 app[web.1]: File "/app/app/email.py", line 9, in send_async_email
2021-04-06T10:14:41.736726+00:00 app[web.1]: mail.send(msg)
2021-04-06T10:14:41.736727+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_mail.py", line 491, in send
2021-04-06T10:14:41.736727+00:00 app[web.1]: with self.connect() as connection:
2021-04-06T10:14:41.736728+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_mail.py", line 144, in __enter__
2021-04-06T10:14:41.736728+00:00 app[web.1]: self.host = self.configure_host()
2021-04-06T10:14:41.736728+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask_mail.py", line 158, in configure_host
2021-04-06T10:14:41.736729+00:00 app[web.1]: host = smtplib.SMTP(self.mail.server, self.mail.port)
2021-04-06T10:14:41.736729+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/smtplib.py", line 251, in __init__
2021-04-06T10:14:41.736730+00:00 app[web.1]: (code, msg) = self.connect(host, port)
2021-04-06T10:14:41.736730+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/smtplib.py", line 336, in connect
2021-04-06T10:14:41.736730+00:00 app[web.1]: self.sock = self._get_socket(host, port, self.timeout)
2021-04-06T10:14:41.736731+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/smtplib.py", line 307, in _get_socket
2021-04-06T10:14:41.736731+00:00 app[web.1]: self.source_address)
2021-04-06T10:14:41.736732+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/green/socket.py", line 44, in create_connection
2021-04-06T10:14:41.736732+00:00 app[web.1]: for res in getaddrinfo(host, port, 0, SOCK_STREAM):
2021-04-06T10:14:41.736732+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 517, in getaddrinfo
2021-04-06T10:14:41.736733+00:00 app[web.1]: qname, addrs = _getaddrinfo_lookup(host, family, flags)
2021-04-06T10:14:41.736733+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 490, in _getaddrinfo_lookup
2021-04-06T10:14:41.736733+00:00 app[web.1]: raise err
2021-04-06T10:14:41.736734+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 479, in _getaddrinfo_lookup
2021-04-06T10:14:41.736734+00:00 app[web.1]: answer = resolve(host, qfamily, False, use_network=use_network)
2021-04-06T10:14:41.736734+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 432, in resolve
2021-04-06T10:14:41.736735+00:00 app[web.1]: raise EAI_EAGAIN_ERROR
2021-04-06T10:14:41.736735+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 479, in _getaddrinfo_lookup
2021-04-06T10:14:41.736735+00:00 app[web.1]: answer = resolve(host, qfamily, False, use_network=use_network)
2021-04-06T10:14:41.736736+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/eventlet/support/greendns.py", line 432, in resolve
2021-04-06T10:14:41.736736+00:00 app[web.1]: raise EAI_EAGAIN_ERROR
**2021-04-06T10:14:41.736737+00:00 app[web.1]: socket.gaierror: [Errno -3] Lookup timed out**
我尝试了各种解决方案、更改端口、更改电子邮件提供商(gmail 和虚拟主机提供的电子邮件),但似乎找不到解决方案。
有什么想法吗?