使用Flask通过Yandex发送邮件时遇认证权限错误求助
解决Flask使用Yandex邮箱发送邮件的认证失败问题
出现"authentication failed: This user does not have access rights to this service"错误,核心原因是Yandex邮箱目前禁止使用账号登录密码进行SMTP第三方认证,必须使用应用专用密码,以下是具体解决步骤:
1. 生成Yandex应用专用密码
- 登录你的Yandex邮箱账号,进入账号安全设置界面
- 找到「应用密码」选项(需先开启账号的双重验证才能生成)
- 为你的Flask应用创建新的应用密码,复制生成的字符串
2. 修正代码
移除重复的mail = Mail(app)初始化(第一行的初始化无意义,应在配置完成后再初始化),然后将MAIL_PASSWORD替换为刚生成的应用专用密码,修正后的代码如下:
from flask import Flask from flask_mail import Mail, Message app = Flask(__name__) # 邮件配置 app.config['MAIL_SERVER'] = 'smtp.yandex.com' app.config['MAIL_PORT'] = 465 app.config['MAIL_USE_TLS'] = False app.config['MAIL_USE_SSL'] = True app.config['MAIL_USERNAME'] = 'my-username@yandex.com' app.config['MAIL_PASSWORD'] = '你的应用专用密码' # 替换为生成的密码 mail = Mail(app) @app.route('/send-email') def send_mail(): msg = Message( 'This email was sent by me from Flask', sender='my-username@yandex.com', recipients=['rec@gmail.com'] ) msg.body = "This is the email body, I just wanted to test the flask email option, and see how does it work." mail.send(msg) return 'Email sent!'
额外检查点
- 确认Yandex邮箱的SMTP服务处于开启状态(默认开启,可在邮箱设置中验证)
- 确保邮箱地址完全正确,包括后缀(如@yandex.com、@yandex.ru等)
内容的提问来源于stack exchange,提问作者Rachid
相关产品推荐
相关产品推荐

