前言
我们在Django中会碰到发送邮件的需求,Django中内置了邮件发送功能,被定义在django.core.mail
模块中。发送邮件需要使用SMTP服务器,常用的免费服务器有:163、126、QQ,下面以163邮件为例。
思路
使用Django发送邮件就相当于,事先准备好一个可用的邮箱账户,并设置好POP3/SMTP/IMAP。然后去该邮箱获得授权码,Django在发邮件时通过授权码登录该邮箱,然后通过这个邮箱向指定的一个或多个账号发送邮件。
获取授权码
首先要有一个163邮箱的账号!然后登录进去选择设置 ▶ POP3/SMTP/IMAP:
然后,如下图,勾选IMAP/SMTP服务。
我们进入客户端授权码,选择开启。
然后,进入手机验证程序,我们获取验证码并输入,然后点击确认。
请牢记你的授权码,它只会在页面中显示一次,不过,目前的策略是会给你绑定的手机号发这个授权码,如果忘了,就重新获取吧
授权码:990496256dd
发送简单邮件示例
这个示例可以应用于一封邮件发送给一个或多个收件人。但不能带附件。
settings配置
现在,我们进入Django的settings
中设置:
注意,EMAIL_USE_TLS
和EMAIL_USE_SSL
是互斥的,也就是说,不能同时为True
。
views配置
send_mail
各参数如下:
- subject,邮件标题
- message,发送邮件内容
- from_email,发件人
- recipient_list,收件人,可以是多个
- fail_silently,如果为
False
时,发送失败抛出错误
现在,有了上述这些关键代码之后,我们就可以向指定的邮箱发邮件了,如果收不到邮件,可有去看垃圾邮件中找找,可能被当成了垃圾邮件(我在qq邮箱中遇到这情况,解决办法是,点开这个邮件,点击我不是垃圾邮件,就好了)。
多封邮件发送多个收件人
有时候会遇到多封邮件同时发送多个人,怎么办呢?settings
配置不变,修改views
中代码即可:
当发送多封邮件时,就要使用send_mass_mail
了。上例中的列表内,也可以填写多个收件人。
这里简要说下send_mail
和send_mass_mail
的区别:
send_mail
每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail
是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail
要优于 send_mail
。
发送带附件的邮件
这里需要导入EmailMessage
来完成。
上例中,attach_file
使用当前文件系统下的某个文件做为附件。调用时,传入某个文件的完整路径,以及该附件的MIME类型(可选的)。 忽略MIME类型的话,Django会自动根据附件文件名来推测MIME类型。最简单的用法如下:
另外的,我们还可以使用attach
传递三个参数:filename
,content
和 mimetype. filename
是出现在邮件中的附件文件的名称,content
是附件的内容,而 mimetype
是附件所使用的MIME类型。 如果忽略 mimetype
, Django会自动根据附件文件名来推测MIME内容类型。
例如:
前言
我们在Django中会碰到发送邮件的需求,Django中内置了邮件发送功能,被定义在django.core.mail
模块中。发送邮件需要使用SMTP服务器,常用的免费服务器有:163、126、QQ,下面以163邮件为例。
思路
使用Django发送邮件就相当于,事先准备好一个可用的邮箱账户,并设置好POP3/SMTP/IMAP。然后去该邮箱获得授权码,Django在发邮件时通过授权码登录该邮箱,然后通过这个邮箱向指定的一个或多个账号发送邮件。
获取授权码
首先要有一个163邮箱的账号!然后登录进去选择设置 ▶ POP3/SMTP/IMAP:
然后,如下图,勾选IMAP/SMTP服务。
我们进入客户端授权码,选择开启。
然后,进入手机验证程序,我们获取验证码并输入,然后点击确认。
请牢记你的授权码,它只会在页面中显示一次,不过,目前的策略是会给你绑定的手机号发这个授权码,如果忘了,就重新获取吧
授权码:990496256dd
发送简单邮件示例
这个示例可以应用于一封邮件发送给一个或多个收件人。但不能带附件。
settings配置
现在,我们进入Django的settings
中设置:
注意,EMAIL_USE_TLS
和EMAIL_USE_SSL
是互斥的,也就是说,不能同时为True
。
views配置
send_mail
各参数如下:
- subject,邮件标题
- message,发送邮件内容
- from_email,发件人
- recipient_list,收件人,可以是多个
- fail_silently,如果为
False
时,发送失败抛出错误
现在,有了上述这些关键代码之后,我们就可以向指定的邮箱发邮件了,如果收不到邮件,可有去看垃圾邮件中找找,可能被当成了垃圾邮件(我在qq邮箱中遇到这情况,解决办法是,点开这个邮件,点击我不是垃圾邮件,就好了)。
多封邮件发送多个收件人
有时候会遇到多封邮件同时发送多个人,怎么办呢?settings
配置不变,修改views
中代码即可:
当发送多封邮件时,就要使用send_mass_mail
了。上例中的列表内,也可以填写多个收件人。
这里简要说下send_mail
和send_mass_mail
的区别:
send_mail
每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail
是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail
要优于 send_mail
。
发送带附件的邮件
这里需要导入EmailMessage
来完成。
上例中,attach_file
使用当前文件系统下的某个文件做为附件。调用时,传入某个文件的完整路径,以及该附件的MIME类型(可选的)。 忽略MIME类型的话,Django会自动根据附件文件名来推测MIME类型。最简单的用法如下:
另外的,我们还可以使用attach
传递三个参数:filename
,content
和 mimetype. filename
是出现在邮件中的附件文件的名称,content
是附件的内容,而 mimetype
是附件所使用的MIME类型。 如果忽略 mimetype
, Django会自动根据附件文件名来推测MIME内容类型。
例如: