如何解决带有 url_for _external=True 的电子邮件,从 docker 容器发送,在返回链接中发送 localhost需要主机子域
我在带有 Nginx 反向代理的 docker 容器中有一个 Flask web 应用程序。每个容器都是一个子域,所以 123.someurl.com 和 abc.someurl.com。用户注册使用该应用程序,当他们提交姓名和电子邮件时,我会向他们发送一封电子邮件,其中包含使用令牌设置密码的链接。一切正常,除了发送的链接是 localhost:5000/reset_password/token。
我需要将链接设为 123.someurl.com/reset_password/token 或 abc.someurl.com/reset_password/token,具体取决于它们所属的容器。
def send_welcome_email(user):
token = user.get_reset_token(expires_sec=86400)
msg = Message('Welcome to someurl.com',recipients=[user.email])
msg.body = f'''You have been registered with someurl.com,you must reset your password before you can login. To do so visit the following link:
{url_for('users.reset_token',token=token,_external=True)}
mail.send(msg)
首先,我将 msg.body 移到模板中,看看这是否有帮助。然后我尝试添加 SERVER_NAME 和 .test_request_context,这解决了 _external url_for 但它也搞砸了非外部 url_for。我更新的功能。
def send_welcome_email(user):
token = user.get_reset_token(expires_sec=86400)
msg = Message(
'Welcome to someurl.com',recipients=[user.email]
)
current_app.config['SERVER_NAME'] = 'development.someurl.com'
with current_app.test_request_context():
url = url_for(
'users.reset_token',_external=True,token=token
)
msg.html = render_template(
'users/register_email.html',url=url,username=user.username
)
mail.send(msg)
该网站在启动时工作正常,但一旦我注册用户,该网站就找不到任何网址。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。