使用Django通过SMTP服务器发送电子邮件的完整指南

本教程详细介绍了如何在Django项目中配置SMTP服务器发送电子邮件,包括Gmail设置、安全凭证管理、构建自动联系表单以及异步邮件发送等实用技术。

如何通过Django使用SMTP服务器发送邮件

关键要点

  • 配置SMTP设置:在settings.py中设置EMAIL_BACKEND、EMAIL_HOST等参数
  • 使用Django Environ保护凭证:通过环境变量管理敏感信息
  • 生成应用专用密码:为Gmail启用两步验证并创建应用密码
  • send_mail函数:使用Django内置函数发送邮件
  • 构建自动联系表单:集成Django表单与邮件发送功能

SMTP服务器工作原理

SMTP(简单邮件传输协议)是发送电子邮件的标准协议。Gmail的SMTP服务器地址为smtp.gmail.com,端口587。

创建Django项目

1
2
3
4
python -m venv .venv
source .venv/bin/activate
pip install django
django-admin startproject EmailProject

配置Django邮件后端

在settings.py中添加:

1
2
3
4
5
6
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = env('EMAIL_HOST')  # 从环境变量读取
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = env('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = env('EMAIL_HOST_PASSWORD')

设置Gmail SMTP

  1. 启用Google账户的两步验证
  2. 生成16位应用专用密码
  3. 在.env文件中配置:
1
2
3
EMAIL_HOST=smtp.gmail.com
EMAIL_HOST_USER=your@gmail.com
EMAIL_HOST_PASSWORD=your_app_password

发送测试邮件

1
2
3
4
5
6
7
from django.core.mail import send_mail
send_mail(
    '测试主题',
    '邮件内容',
    'from@example.com',
    ['to@example.com']
)

构建联系表单

  1. 创建ContactForm类处理表单数据
  2. 实现get_info()方法格式化消息
  3. 添加send()方法发送邮件

异步邮件发送(Django 4.x+)

1
2
3
4
5
6
7
async def send_async_email():
    await send_mail(
        "异步测试",
        "这是通过Django 4.x异步发送的邮件",
        settings.EMAIL_HOST_USER,
        [settings.RECIPIENT_ADDRESS]
    )

最佳实践

  1. 将邮件逻辑封装为可重用服务
  2. 编写单元测试验证邮件功能
  3. 发送HTML格式邮件
  4. 生产环境使用专业邮件服务(SendGrid/Mailgun)
  5. 实现邮件验证功能

常见问题解答

Q:如何在Django中测试邮件发送? A:开发阶段可使用控制台后端:

1
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

Q:如何安全存储邮件凭证? A:使用django-environ从.env文件加载配置,切勿硬编码在源码中。

完整代码示例可在GitHub仓库获取。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计