如何通过Django发送邮件?

180 投票
13 回答
245241 浏览
提问于 2025-04-16 19:40

在我的 settings.py 文件里,我有以下内容:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

# Host for sending e-mail.
EMAIL_HOST = 'localhost'

# Port for sending e-mail.
EMAIL_PORT = 1025

# Optional SMTP authentication information for EMAIL_HOST.
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = False

我的邮件代码:

from django.core.mail import EmailMessage
email = EmailMessage('Hello', 'World', to=['user@gmail.com'])
email.send()

当然,如果我通过 python -m smtpd -n -c DebuggingServer localhost:1025 设置一个调试服务器,我可以在终端看到邮件。

但是,我到底该怎么把邮件发送到 user@gmail.com 而不是调试服务器呢?

在看了你们的回答后,我想澄清几点:

  1. 难道不能用 localhost(简单的 Ubuntu 电脑)来发送邮件吗?

  2. 我以为在 Django 1.3 中,send_mail() 已经有点过时了,应该用 EmailMessage.send() 来代替?

13 个回答

55
  1. 创建一个项目:django-admin.py startproject gmail
  2. 用下面的代码编辑settings.py:

    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_USE_TLS = True
    EMAIL_HOST = 'smtp.gmail.com'
    EMAIL_HOST_USER = 'youremail@gmail.com'
    EMAIL_HOST_PASSWORD = 'email_password'
    EMAIL_PORT = 587
    
  3. 运行交互模式:python manage.py shell

  4. 导入EmailMessage模块:

    from django.core.mail import EmailMessage
    
  5. 发送邮件:

    email = EmailMessage('Subject', 'Body', to=['your@email.com'])
    email.send()
    

想了解更多信息,可以查看send_mailEmailMessage文档中的介绍。

关于Gmail的更新

如果你在通过Gmail发送邮件时遇到问题,记得查看这篇指南

在你的Google账户设置中,去 安全性 > 账户权限 > 对不太安全的应用的访问,并启用这个选项。

另外,在你开启了两步验证后,为你的Gmail创建一个应用专用密码

然后你应该在设置中使用这个应用专用密码。所以要修改以下这一行:

    EMAIL_HOST_PASSWORD = 'your_email_app_specific_password'

如果你对发送HTML邮件感兴趣,可以看看这个

184

我在Django中使用Gmail作为我的SMTP服务器。这比处理postfix或其他邮件服务器简单多了。我并不想管理邮件服务器。

在settings.py文件中:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'me@gmail.com'
EMAIL_HOST_PASSWORD = 'password'

注意:从2016年开始,Gmail默认不再允许这样做。你可以选择使用像Sendgrid这样的外部服务,或者按照谷歌的这个教程来降低安全性,但允许这种选项:https://support.google.com/accounts/answer/6010255

64

把邮件发送到一个真正的SMTP服务器。如果你不想自己搭建一个服务器,可以找一些公司来帮你运行,比如谷歌就提供这样的服务。

撰写回答