Django 发送邮件

4 投票
3 回答
6732 浏览
提问于 2025-04-15 17:22

在PHP中,我只需要调用 mail() 就可以简单地发送邮件。而在Django中,我需要设置SMTP服务器和其他一些东西。

有没有更简单的方法可以在Django中发送邮件呢?

3 个回答

0

无论如何,你需要一些后端支持(可以理解为邮件传输代理,简称MTA)。我能想到两种选择:

  1. 正如之前提到的,你可以使用 sendmail,具体可以参考这个链接 http://djangosnippets.org/snippets/1864/
  2. 更好的选择是使用一个Python的邮件传输代理。比如说,Lamson,这是一个Python邮件服务器(MTA):http://lamsonproject.org/docs/hooking_into_django.html
2

在PHP中,你只能在非Windows系统上用一个简单的mail()命令发送邮件。这种方式需要你本地安装并正确配置一个邮件传输代理(MTA),比如Postfix,这在大多数网络服务器上都是应该有的。如果你的应用程序对邮件的依赖比较大,可能就需要考虑使用第三方或去中心化的邮件服务。对于那些对快速和可靠的邮件传输有很大依赖的情况,通常会通过SMTP发送邮件到一个中央邮件服务器(就像一个“大管道”)。

不过,如果你想在PHP中实现类似的功能,可以试试这个:

import subprocess

def send_mail(from_addr, to_addr, subject, body):
  cmdline = ["/usr/sbin/sendmail", "-f"]
  cmdline.append(from_addr)
  cmdline.append(to_addr)
  mailer = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
  dialog = "From: %s\nTo: %s\nSubject: %s\n\n%s\n.\n" % (from_addr, to_addr, subject, body)
  return mailer.communicate(dialog)

然后可以这样使用它: send_mail ("我 <myself@mydomain.com>", "收件人 <other@hisdomain.com>", "主题", "邮件内容")

3

django.core.mail 模块中,有几个很不错的发送邮件的功能。

如果你想学习,可以查看这个教程:发送电子邮件

虽然用 Python 的 smtplib 库发送邮件相对简单,但 Django 提供了一些简单的封装。这些封装的目的是让发送邮件变得更快,更方便在开发过程中测试邮件发送功能,并且支持一些不能使用 SMTP 的平台。

最简单的函数,可能最适合你的需求,就是 send_mail 函数:

send_mail(
    subject, 
    message, 
    from_email, 
    recipient_list, 
    fail_silently=False, 
    auth_user=None, 
    auth_password=None, 
    connection=None)

撰写回答