Django发送邮件

使用Django发送邮件

Django中内置了邮件发送功能,被定义在django.core.mail模块中。发送邮件需要使用SMTP服务器,常用的免费服务器有:163126QQ,下面以163邮件为例。

(1) 选择免费服务器,开启收发邮件功能。

163邮箱具体方法请参考:https://help.mail.163.com/faqDetail.do?code=d7a5dc8471cd0c0e8b4b8f4f8e49998b374173cfe9171305fa1ce630d7f67ac2cda80145a1742516 

foxmail邮箱具体方法请参考:http://help.mail.163.com/faqDetail.do?code=d7a5dc8471cd0c0e8b4b8f4f8e49998b374173cfe9171305fa1ce630d7f67ac25c12dcb3d46222b6 

outlook邮箱具体方法请参考: http://help.mail.163.com/faqDetail.do?code=d7a5dc8471cd0c0e8b4b8f4f8e49998b374173cfe9171305fa1ce630d7f67ac27535b97f102eda26

(2) 在Django配置文件中,设置邮箱的配置信息

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.163.com'   # 如果是qq邮箱请更换为'smtp.qq.com'

# EMAIL_USE_SSL 和 EMAIL_USE_TLS 是互斥的,即只能有一个为 True。
EMAIL_USE_SSL = True

EMAIL_PORT = 25
#发送邮件的邮箱
EMAIL_HOST_USER = 'hahaha@163.com'
#在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = '我是客户端授权码'
#收件人看到的发件人
EMAIL_FROM = '夕颜<xiyan@163.com>'

(3) 使用Django提供的模块发送邮件

1、在django.core.mail模块提供了send_mail来发送邮件。

send_mail(subjectmessagefrom_emailrecipient_list,html_message=None)

  • subject 邮件标题
  • message 普通邮件正文, 普通字符串
  • from_email 发件人
  • recipient_list 收件人列表
  • html_message 多媒体邮件正文,可以是html字符串
from django.conf import settings
from django.core.mail import send_mail

def send_verify_email(to_email, verify_url):
    """
    发送验证邮箱邮件
    :param to_email: 收件人地址
    :param verify_url:验证链接
    :return:None
    """
    subject = "夕颜邮箱验证"
    html_message = '<p>尊敬的用户您好!</p>' \
                   '<p>感谢您使用夕颜微博。</p>' \
                   '<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \
                   '<p><a href="%s">%s<a></p>' % (to_email, verify_url, verify_url)
    send_mail(subject, "", "xiyan@163.com", [to_email], html_message=html_message)

2、在django.core.mail模块提供了send_mass_mail来一次性发送多个邮件。

from django.core.mail import send_mass_mail
 
def send_verify_email(to_email, verify_url):
    """
    发送验证邮箱邮件
    :param to_email: 收件人地址
    :param verify_url:验证链接
    :return:None
    """
    message1 = ('Subject here', 'Here is the message', 'from@example.com', ["to_email"])
    message2 = ('Another Subject', 'Here is another message', 'from@example.com', ['second_to_email'])

    send_mass_mail((message1, message2), fail_silently=False)

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

3、在邮件中添加附件,发送 html 格式的内容或者纯文本(text/plain)

from __future__ import unicode_literals
 
from django.conf import settings
from django.core.mail import EmailMultiAlternatives
 
def send_verify_email(to_email, verify_url):
    """
    发送验证邮箱邮件
    :param to_email: 收件人地址
    :param verify_url:验证链接
    :return:None
    """
    subject = "夕颜邮箱验证"
    text_content = '这是一封重要的邮件.'
    html_message = '<p>尊敬的用户您好!</p>' \
                   '<p>感谢您使用夕颜微博。</p>' \
                   '<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \
                   '<p><a href="%s">%s<a></p>' % (to_email, verify_url, verify_url)
    msg = EmailMultiAlternatives(subject, text_content, from_email, [to_email])
    msg.attach_alternative(html_message, "text/html")
    msg.send()

如果想通过异步任务实现Django发送邮件,可参考博客:https://www.cnblogs.com/caijunchao/p/13081564.html

 

上一篇:ASSERT与assert


下一篇:Python虚拟环境的创建和包下载