谷歌下线低安全应用后 本地Django如何测试SMTP发信至谷歌邮箱
本地Django环境向Gmail发邮件实现方案
谷歌下线低安全性应用访问权限后,本地环境通过SMTP向Gmail发信只能使用应用专用密码方案,具体操作步骤如下:
前置准备
你使用的Gmail账号必须先开启两步验证,这是生成应用专用密码的强制前置条件,未开启两步验证的账号无法使用SMTP发信,目前没有其他绕过方式。
步骤1:生成Gmail应用专用密码
- 进入谷歌账号的安全设置页面,找到「应用专用密码」入口
- 选择应用类型为「邮件」,设备选择当前本地开发所用设备
- 点击生成后会得到16位长度的应用专用密码,这个密码只会展示一次,先妥善保存,后续配置要用到
步骤2:修改Django本地配置
打开本地Django项目的settings.py文件,添加/修改邮件相关配置项:
# 指定SMTP邮件后端 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' # 谷歌官方SMTP服务器地址 EMAIL_HOST = 'smtp.gmail.com' # SMTP端口,优先用587走TLS加密 EMAIL_PORT = 587 EMAIL_USE_TLS = True # 发信Gmail账号,填完整邮箱地址 EMAIL_HOST_USER = '你的Gmail邮箱地址@gmail.com' # 这里填刚才生成的16位应用专用密码,不要填谷歌账号的主密码 EMAIL_HOST_PASSWORD = '16位应用专用密码' # 默认发件人地址,和上面的邮箱保持一致即可 DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
如果587端口连接失败,可以替换为465端口走SSL加密,对应配置修改为:
EMAIL_PORT = 465 EMAIL_USE_TLS = False EMAIL_USE_SSL = True
步骤3:功能测试
两种测试方式按需选择即可:
- 真实发信测试
在项目根目录执行命令进入Django交互shell:python manage.py shell
在shell中执行以下测试代码:
执行后返回值为from django.core.mail import send_mail send_result = send_mail( subject='本地Django测试邮件', message='这是本地开发环境发出的SMTP测试邮件', from_email=None, recipient_list=['收信的Gmail地址'], fail_silently=False, ) print(send_result)1就代表发信请求提交成功,去对应Gmail的收件箱查收即可,没收到的话先检查垃圾邮件文件夹。 - 本地无网调试
如果你只是调试Django的发信逻辑、不需要真的把邮件发到公网,可以直接用Django自带的控制台邮件后端,不需要配置任何SMTP信息,触发的邮件内容会直接打印在运行服务的终端里,适合纯功能开发调试。
仅需把settings.py里的邮件后端配置改为:EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
常见问题排查
- 不要尝试用账号主密码直接登录SMTP,谷歌已经完全封禁了非OAuth、非应用专用密码的第三方SMTP访问
- 复制应用专用密码时注意不要带入前后空格、换行符,密码本身不需要输入中间显示的分隔空格
- 出现连接超时报错先检查本地网络是否能正常连通谷歌SMTP服务器,网络受限的环境无法直接连Gmail SMTP
- 发信成功但收件箱找不到邮件,优先检查垃圾邮件、推广邮件分类
内容的提问来源于stack exchange,提问作者Abdelhamed Abdin
相关产品推荐
相关产品推荐

