Flask:flask_mail 从不发送电子邮件(挂起而无响应)

Flask: flask_mail never sends email (Hangs without response)

我有以下代码:

蓝图文件片段:

...
from flask_mail import Message
from app import mail
from os import environ
...

@index_bp.route('/contact', methods=['POST'])
def contact():
    form = ContactForm()
    
    if form.validate_on_submit():
        print('Form received')
        msg = Message('Test', recipients=environ.get('TARGET_MAIL'))
        print('msg created')
        msg.body = 'Test mail'
        print('Body created')
        mail.send(msg)
        print('Mail sent')

    
    return redirect(url_for('.index'))

配置文件:

class Config:
    STATIC_FOLDER = 'static'
    TEMPLATES_FOLDER = 'templates'
    SECRET_KEY = environ.get('SECRET_KEY')
    MAIL_SERVER = 'smtp.google.com'
    MAIL_PORT = 465
    MAIL_USERNAME = environ.get('MAIL_USERNAME')
    MAIL_PASSWORD = environ.get('MAIL_PASSWORD')
    MAIL_USE_TLS = False
    MAIL_USE_SSL = True
    MAIL_DEFAULT_SENDER = environ.get('MAIL_USERNAME')

初始化 文件:

from flask import Flask
from flask_mail import Mail

mail = Mail()
def init_app():
    # Set up core app
    app = Flask(__name__)
    app.config.from_object('config.Config')
    mail.init_app(app)
    
    with app.app_context():
        # Import app routes
        from .index import routes

        # Register blueprints
        app.register_blueprint(routes.index_bp)

        return app

当我尝试测试应用程序的电子邮件功能时,mail.send(...) 部分就举手了。它永远不会解决,实际上不会引发任何错误,而是让页面永远加载。很可能它与 Gmail 有关,但我不知道缺少什么。

非常感谢任何帮助。以下是代码生成的打印件:

收到表格

已创建消息

Body 创建

继续避免在离开页面加载时做任何其他事情

** 更新 **

这是我为使用 Gmail 测试 Flask Mail 而制作的另一个片段,但仍然出现相同的错误:

from flask import Flask
from flask_mail import Mail, Message

app = Flask(__name__)

app.config['MAIL_SERVER']='smtp.google.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = '<new gmail account>@gmail.com'
app.config['MAIL_PASSWORD'] = '<app password>'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True

mail = Mail(app)

@app.route("/")
def index():
  msg = Message('Hello from the other side!', sender = '<new gmail account>@gmail.com', recipients = ['<my gmail address>@gmail.com'])
  msg.body = "This is a test email"
  mail.send(msg)
  return "Message sent!"

编辑:

错误是使用 smtp.google.com 而不是 smtp.gmail.com,但是,此处发布的答案也很有帮助:)。

由于您的 Google 帐户,Google 最近更改了一些安全功能,这些功能不允许安全性较低的应用仅使用用户名和密码登录您的帐户,您可以使用应用MAIL_PASSWORD 配置中的密码而不是您的 Google 帐户密码以解决问题

在下面的link中,我回答了同样的问题你可以查看

Google disabled access to less secure apps