Django 发送邮件

Posted 龘龖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 发送邮件相关的知识,希望对你有一定的参考价值。

Django 发送邮件

本章节涉及django的发邮件模块send_mail、send_mass_mail、EmailMultiAlternatives

from django.core.mail import send_mail

from django.core.mail import send_mass_mail

from django.core.mail import EmailMultiAlternatives

1. 配置相关参数

如果用的是 163的企业邮箱,settings配置类似于下面:

EMAIL_BACKEND = ‘django.core.mail.backends.smtp.EmailBackend‘
  
EMAIL_USE_TLS = False
EMAIL_HOST = ‘smtp.163.com‘
EMAIL_PORT = 25
EMAIL_HOST_USER = ‘[email protected]‘
EMAIL_HOST_PASSWORD = ‘xxxx‘
DEFAULT_FROM_EMAIL = ‘[email protected]
DEFAULT_FROM_EMAIL 还可以写成这样:
DEFAULT_FROM_EMAIL = ‘from<[email protected]>‘

这样别人收到的邮件中就会有你设定的名称,如下形式:

     发件人:from<[email protected]>

下面是一些常用的邮箱:

163 邮箱    126 邮箱    QQ 邮箱 

其它邮箱参数可能登陆邮箱看寻找帮助信息,也可以尝试在搜索引擎中搜索:"SMTP 邮箱名称",比如:"163 SMTP" 进行查找。

qq和163都容易失败,不是技术的问题。建议使用阿里或腾讯企业邮箱来尝试。

2. 发送邮件:

2.1 官网的一个例子:

from django.core.mail import send_mail
 
send_mail(‘Subject here‘, ‘Here is the message.‘, ‘[email protected]‘,
    [‘[email protected]‘], fail_silently=False)

2.2 一次性发送多个邮件:

from django.core.mail import send_mass_mail
 
 
message1 = (‘Subject here‘, ‘Here is the message‘, ‘[email protected]‘, [‘[email protected]‘, ‘[email protected]‘])
message2 = (‘Another Subject‘, ‘Here is another message‘, ‘[email protected]‘, [‘[email protected]‘])
 
 
send_mass_mail((message1, message2), fail_silently=False)

备注:send_mail 每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail 是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail 要优于 send_mail。

2.3 如果我们想在邮件中添加附件,发送 html 格式的内容

from django.conf import settings
from django.core.mail import EmailMultiAlternatives
 
 
from_email = settings.DEFAULT_FROM_EMAIL
# subject 主题 content 内容 to_addr 是一个列表,发送给哪些人
msg = EmailMultiAlternatives(subject, content, from_email, [to_addr])
 
msg.content_subtype = "html"
 
# 添加附件(可选)
msg.attach_file(‘./twz.pdf‘)
 
# 发送
msg.send()


 上面的做法可能有一些风险,除非你确信你的接收者都可以阅读 html 格式的 邮件。

为安全起见,你可以弄两个版本,一个纯文本(text/plain)的为默认的,另外再提供一个 html 版本的(好像好多国外发的邮件都是纯文本的)

from __future__ import unicode_literals
 
from django.conf import settings
from django.core.mail import EmailMultiAlternatives
 
subject = ‘标题‘
 
text_content = ‘邮件内容‘
 
html_content = ‘<p>邮件<strong>内容</strong></p>‘
 
msg = EmailMultiAlternatives(subject, text_content, from_email, [[email protected]])
 
msg.attach_alternative(html_content, "text/html")
 
msg.send()

 

 

以上是关于Django 发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

我想在我的 Django 应用程序中发送每周电子邮件。从数据库中提取数据并实时发送电子邮件的代码应该在哪里?

python 项目实战之Django 邮件发送

在 django 中发送带附件的电子邮件

Django:如何发送带有嵌入图像的 HTML 电子邮件

Django - 如何在发送邮件时重定向

django 使用 django-registration 以 html 格式发送电子邮件