📜  在 django 中发送电子邮件 - Python (1)

📅  最后修改于: 2023-12-03 15:23:08.319000             🧑  作者: Mango

在 Django 中发送电子邮件 - Python

在 Web 开发中,发送电子邮件是一个常见的需求场景。Django 提供了一种简单、方便的方式来发送电子邮件。

准备工作

在 Django 项目中发送电子邮件,我们需要在 settings.py 文件中配置邮件相关的参数。以下是一个示例配置:

# settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your_email@gmail.com'
EMAIL_HOST_PASSWORD = 'your_email_password'

在这个示例配置中,我们使用 Gmail 作为邮件服务器,使用 SMTP 协议发送邮件。当然,你也可以使用其他邮件服务器和协议,只需要相应更改配置即可。

发送邮件

Django 提供了一个 send_mail 函数,用于发送邮件。该函数定义如下:

from django.core.mail import send_mail

send_mail(
    subject,  # 主题
    message,  # 正文
    from_email,  # 发件人地址
    recipient_list,  # 收件人地址列表
    fail_silently=False,  # 是否开启静默模式
    auth_user=None,  # 发件人账号信息
    auth_password=None,  # 发件人账号信息
    connection=None,  # 邮件服务器连接对象
    html_message=None,  # HTML 格式的邮件内容
)

以上是 send_mail 函数的完整参数列表。其中,subjectmessagefrom_emailrecipient_list 四个参数是必须提供的。

以下是一个示例邮件发送代码:

from django.core.mail import send_mail

subject = 'test email'
message = 'this is a test email from django'
from_email = 'your_email@gmail.com'
recipient_list = ['recipient1@gmail.com', 'recipient2@gmail.com']

send_mail(subject, message, from_email, recipient_list)

在这个示例代码中,我们创建了一个主题为 'test email',正文为 'this is a test email from django' 的邮件,并将其发送给了两个收件人。

发送 HTML 邮件

除了纯文本格式的邮件外,还可发送 HTML 格式的邮件。在 send_mail 函数中,你可以使用 html_message 参数(HTML 格式的邮件内容)来实现。

以下是一个示例代码:

from django.core.mail import send_mail

subject = 'test email'
message = 'this is a test email from django'
from_email = 'your_email@gmail.com'
recipient_list = ['recipient1@gmail.com', 'recipient2@gmail.com']
html_message = '<html><body><h1>this is a test email from django</h1></body></html>'

send_mail(subject, message, from_email, recipient_list, html_message=html_message)

在这个示例代码中,我们增加了一个 html_message 参数,其值为 HTML 格式的邮件内容。

发送带附件的邮件

如果你需要发送带附件的邮件,可以使用 Django 提供的 EmailMessage 类。该类定义如下:

from django.core.mail import EmailMessage

email = EmailMessage(
    subject,  # 主题
    message,  # 正文
    from_email,  # 发件人地址
    recipient_list,  # 收件人地址列表
    cc=None,  # 抄送地址列表
    bcc=None,  # 密送地址列表
    reply_to=None,  # 回复地址
    headers=None,  # 邮件头信息
    attachments=None,  # 附件列表
    connection=None,  # 邮件服务器连接对象
    alternatives=None,  # 备用格式邮件列表
    subtype=None,  # 邮件子类型
    encoding=None,  # 邮件编码方式
    **kwargs
)

send_message 函数支持的参数外,EmailMessage 还支持 ccbccreply_toheadersattachments 等参数,允许你对邮件进行更加细致的控制。

以下是一个示例代码:

from django.core.mail import EmailMessage

subject = 'test email with attachment'
message = 'this is a test email from django'
from_email = 'your_email@gmail.com'
recipient_list = ['recipient1@gmail.com', 'recipient2@gmail.com']
html_message = '<html><body><h1>this is a test email from django</h1></body></html>'
attachment = ('file.pdf', open('/path/to/file.pdf', 'rb').read())

email = EmailMessage(subject, message, from_email, recipient_list, html_message=html_message)
email.attach(*attachment)
email.send()

在这个示例代码中,我们创建了一个主题为 'test email with attachment',正文为 'this is a test email from django' 的邮件,并将其发送给了两个收件人。邮件附件是一个名为 'file.pdf' 的 PDF 文件。我们使用 EmailMessage 类来创建邮件,并使用 attach 方法将附件添加到邮件中。

以上就是在 Django 中发送电子邮件的介绍。希望这篇文章对你有所帮助!