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
我有以下代码:
蓝图文件片段:
...
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