原文来自: http://yushine.iteye.com/blog/1167734
简介 :
虽然python提供了smtplib库,来完成email的发送功能,但是django对其进行了封装,使得发送邮件的接口变得更简单,更方便,django的封装位于django.core.mail
例子:
from
django.core.mail
import
send_mail
send_mail
(
'Subject here'
,
'Here is the message.'
,
'from@example.com'
,
[
'to@example.com'
],
fail_silently
=
False
)
邮件的发送通过django的setting文件中设置的 EMAIL_HOST
、 EMAIL_PORT
、 EMAIL_HOST_USER
、
EMAIL_HOST_PASSWORD
来认证SMTP服务器、 EMAIL_USE_TLS
用来说明发送的时候是否使用一个安全的连接
来进行, DEFAULT_CHARSET
用来指定发送邮件的字符集。
定义:
(1)
send_mail
(subject
, message
, from_email
, recipient_list
,
fail_silently=False
, auth_user=None
,auth_password=None
)
作用:发送一个邮件
subject:邮件的标题
message:邮件的内容
from_email:发送邮件者
recipient_list
:接受邮件者列表
fail_silently:可选参数,默认是False,如果是False,则发送失败时候,会抛出
smtplib.SMTPException异常
,具体详细的异常,
请参考 smtplib docs
,这些异常都是SMTPException的子类。
auth_user
:可选的参数,如果有,那么认证SMTP Server时,使用该用户,否则使用EMAIL_HOST_USER
设置
auth_password:可选参数,如果有,那么认证SMTP
Server时,使用该密码,否则使用EMAIL_HOST_PASSWORD
设置
(2)
send_mass_mail(datatuple
, fail_silently=False
, auth_user=None
, auth_password=None
)
datatuple
:是一个元组,其格式如下:
(
subject
,
message
,
from_email
,
recipient_list
)
作用:发送一组邮件
fail_silently
, auth_user
and auth_password三个参数的意义同send_mail。
send_mass_mail和send_mail的区别
send_mail每次发送邮件都打开一个新的连接来发送。
send_mass_mail每次发送邮件时仅仅打开一个连接,将这次元组中的所有邮件发送出去。
所以send_mass_mail更有效率。
两个给管理员发送邮件的快捷方式
mail_admins (subject , message , fail_silently=False )
和
mail_managers (subject , message , fail_silently=False )
这两个方法在发送邮件时注意以下两点:
(1)邮件的标题前面django会自动加上 EMAIL_SUBJECT_PREFIX 中设置的前缀,缺省是"[Django] " 。
(2)邮件的发送者将是由SERVER_EMAIL 来设置
(3)邮件的接受者将是 MANAGERS 和 ADMINS 来设置
EmailMessage 和 SMTPConnection
上面提供的email函数,仅仅能够提供最基本的发送邮件的功能,其他的诸如:文件附件和多媒体email都需要EmailMessage类来提供。
EmailMessage构造函数的所有参数如下所示,所有参数都是可选的
subject: 邮件的标题
body:邮件的正文, 这个字段应该是纯文本文件
from_email:发送者的邮件地址,fred@example.com 和 Fred <fred@example.com>,这两种格式都是合法的,
如果该字段没有设置的话,将使用setting中的 DEFAULT_FROM_EMAIL
to:所有接收人组成的一个元组
bcc:所有秘密抄送人组成的一个元组
connection: 发送邮件是使用的SMTPConnection 连接,如果不适用该字段,那么每次发送邮件时都会新建
一个SMTPConnection 对象
attachments:附件列表, 能是email.MIMEBase.MIMEBase实例,或者 (filename, content, mimetype)元组
headers:邮件头字段, 如果要增加额外的邮件头,请用该字段,关键字是key,值是value。
例如:
email
=
EmailMessage
(
'Hello'
,
'Body goes here'
,
'from@example.com'
,
[
'to1@example.com'
,
'to2@example.com'
],
[
'bcc@example.com'
],
headers
=
{
'Reply-To'
:
'another@example.com'
})
该类有下列方法可用:
(1)send(fail_silently=False) 发送邮件,如果fail_silently=False时,出错将抛掷异常
(2)
message() 返回一个
django.core.mail.SafeMIMEText类型的对象或者
django.core.mail.SafeMIMEMultipart类型的对象。
(3)
recipients()
获取发送人列表,包括to和bcc的所有发送人
(4)attach() 向邮件中增加附件,其参数可以是
email.MIMEBase.MIMEBase的实例,或者是
filename
, content
and mimetype,
其中filename是附件中呈现的文件名,content是附件的数据,
mimetype
是附件的MIME类型
例如:message
.
attach
(
'design.png'
,
img_data
,
'image/png'
)
(5)attach_file()
直接从文件系统中向邮件添加附件,如果mime类型没有填写,那么django会根据文件名推测出来。
例如:message
.
attach_file
(
'/images/weather_map.png'
)
EmailMultiAlternatives
使用EmailMessage中发送邮件的内容,只能是一种类型的"text/html"或者
"text/plain"。但是实际应用中,
我们可能会一封邮件中既有text/html
的内容,又有text/plain的内容,这个时候可以使用EmailMultiAlternatives
类,他是EmailMessage
的子类,他有一个方法attach_alternative()
,可以让邮件中包括多种形式的内容
例如:
from
django.core.mail
import
EmailMultiAlternatives
subject
,
from_email
,
to
=
'hello'
,
'from@example.com'
,
'to@example.com'
text_content
=
'This is an important message.'
html_content
=
'<p>This is an <strong>important</strong> message.</p>'
msg
=
EmailMultiAlternatives
(
subject
,
text_content
,
from_email
,
[
to
])
msg
.
attach_alternative
(
html_content
,
"text/html"
)
msg
.
send
()
EmailMessage
的类型修改
EmailMessage
的类型默认情况下是"text/plain",可以通过修改subtype属性,使得类型变成"text/html"
例如:
msg
=
EmailMessage
(
subject
,
html_content
,
from_email
,
[
to
])
msg
.
content_subtype
=
"html"
# Main content is now text/html
msg
.
send
()
SMTPConnection 对象
SMTPConnection 初始化需要四个参数:连接SMTP服务器所需要的host, port, username and password,如果某个缺省了,那么就从setting文件中读取默认值,另外send_messages用来发送一个邮件列表
例如:
connection
=
SMTPConnection
()
# Use default settings for connection
messages
=
get_notification_email
() #get_notification_email假设是用户定义的一个函数,用来获取所有想发出去的邮件
connection
.
send_messages
(
messages
)
分享到:
相关推荐
Django为开发者提供了便捷的邮件发送模块,基于Python内置的SMTP(Simple Mail Transfer Protocol)库进行封装。本文将详细介绍如何使用Django的邮件发送模块,特别是通过SMTP服务发送邮件的方法。 首先,我们来看...
在`email_service`的`tasks.py`文件中定义一个名为`send_email`的任务,这个任务应该包含实际的邮件发送逻辑,使用Python的`smtplib`或Django内置的`send_mail`函数。因为是异步任务,所以邮件的发送不会立即完成,...
在发邮件时使用Python自带的发送邮件,出现只能发送一封邮件,第二次发送,提示发送成功但是无法收到,只好使用这个去发邮件了。是从Django代码中提取出来的,使用和Django一样,多了一个Header的参数,用于显示发件...
`django-appmail-0.5.4` 是一个强大的Django邮件发送库,它的设计思路是将邮件发送的复杂性隐藏在幕后,让开发者能够更专注于应用的核心功能。通过模板系统、模型关联和异步发送等功能,它提高了开发效率并确保了...
Django内置了`django.core.mail`模块,提供了一套完整的电子邮件发送接口。默认情况下,Django不会真正发送邮件,而是将其存储在内存或文件系统中,便于测试。在生产环境中,可以通过配置邮件服务器来实现实际发送。...
#### 二、Django邮件发送基础 Django中内置的邮件发送功能位于`django.core.mail`模块中。该模块提供了多种方法来发送邮件,包括简单的纯文本邮件和HTML格式的邮件等。为了能够发送邮件,我们需要配置一个SMTP...
【Python-djangoceleryses带有AWSSES和Celery的Django邮件后端】是一个针对Python开发中的电子邮件收发功能的高级解决方案。这个项目结合了Django Web框架、Celery异步任务队列以及Amazon Simple Email Service (SES...
【标题】"我的django专栏027阶段源码,实现邮件发送及日志邮件发送" 涉及到的关键知识点主要包括Django框架中的邮件发送功能和日志管理。Django是一个高级的Python Web框架,它提供了许多内置的功能,使得开发者能够...
总结来说,Django通过配置邮件后端、SMTP服务器信息以及使用授权码,可以方便地实现邮件发送功能。在视图中调用 `send_mail` 函数,可以创建和发送邮件。这个功能在许多Web应用中都很常见,比如用于用户注册验证、...
Mandrill可以免费发送邮件,每月1万2000封的邮件数量足够普通使用。使用Django配合Mandrill发送邮件,配置相关DNS记录可以使邮件发送到收件箱而不会进入垃圾箱。可以访问forum.beavermagic.com灌水呀~
#### Django邮件发送基础 在Django中发送邮件的基本方法是通过`send_mail`函数。这个函数接受多个参数来定义邮件的内容和行为: - `subject`: 邮件的主题或标题,通常是一段简短的文字描述。 - `message`: 邮件的...
django邮件系统 Django发送邮件官方中文文档 总结如下: 1、首先这份文档看三两遍是不行的,很多东西再看一遍就通顺了。 2、send_mail()、send_mass_mail()都是对EmailMessage类使用方式的一个轻度封装,所以要关注...
Django-Email-Sender 是一个基于 Django 框架和 Python 语言的后端解决方案,专门设计用于根据业务需求自动执行电子邮件发送任务。它允许开发者在应用程序中集成高度自定义的邮件发送功能,以满足各种业务场景,如...
在Django中,通常使用内置的邮件发送机制进行发送邮件。但是,对于耗时的操作,Django也提供了异步任务的支持。异步任务是指应用程序可以不等待某个任务完成即可继续执行后续的任务。这是通过将耗时的任务推迟到后台...
标题提到的“Python-用于Mailgun, Postmark, SendGrid, SparkPost等等的Django邮件后端和网络挂接”是一个专门针对这个需求的解决方案。本文将深入探讨如何利用这些服务以及Django集成邮件发送功能。 首先,Mailgun...
在这个示例中,Django可能会使用`send_mail`函数从`django.core.mail`模块发送带有验证码的邮件到用户提供的邮箱。 4. 验证码生成与验证:验证码通常是一串随机生成的字符,用户需要在注册过程中输入以确认他们拥有...
这就是为什么引入`django-celery-email`,它可以将邮件发送的过程放到后台进行,保持前端应用的流畅性。 **Celery介绍** Celery是一个基于分布式消息传递的异步任务队列,主要用Python编写,适用于处理大量后台...
在Python的Web开发框架Django中,发送电子邮件是一...通过结合Django的模板系统,你可以创建出结构良好、易于维护的邮件发送代码,同时提供出色的用户体验。在处理大量用户通信时,这个库的效率和灵活性是不可忽视的。