django-28.发送邮件send_mail

Posted jason89

tags:

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

django发邮件的功能很简单,只需简单的配置即可,发邮件的代码里面已经封装好了,调用send_mail()函数就可以了

send_mail()函数

先导入send_mail函数from django.core.mail import send_mail,进入源码里面看看具体函数对应的参数
subject,message,from_email 和recipient_list 这四个参数是必须的。

  • subject: 字符串,邮件标题。
  • message: 字符串,邮件内容。
  • from_email: 字符串,发件邮箱。
  • recipient_list: list列表,列表中每个成员都是一个邮箱地址,而且每个收件人都会在 “收件人/To:” 栏看到出现在recipient_list 中的其他收件人。
  • fail_silently: (可选)布尔值。为False 时,send_mail 会抛出smtplib.SMTPException 异常。smtplib 文档列出了所有可能的异常。这些异常都是 SMTPException 的子类。
  • auth_user:(可选)SMTP服务器的认证用户名。没提供该参数的情况下,Django会使用EMAIL_HOST_USER 配置项的设置。
  • auth_password:(可选)SMTP服务器的认证密码,没提供该参数的情况下,Django会使用EMAIL_HOST_PASSWORD 配置项的设置。
  • connection: (可选)发送邮件的后端。没提供该参数的情况下,Django会使用默认后端的实例。
  • html_message: (可选) send_mail方法独有,可以比较简单地实现一个html文本的传输
def send_mail(subject, message, from_email, recipient_list,
              fail_silently=False, auth_user=None, auth_password=None,
              connection=None, html_message=None):
    """
    Easy wrapper for sending a single message to a recipient list. All members
    of the recipient list will see the other recipients in the ‘To‘ field.

    If auth_user is None, use the EMAIL_HOST_USER setting.
    If auth_password is None, use the EMAIL_HOST_PASSWORD setting.

    Note: The API for this method is frozen. New code wanting to extend the
    functionality should use the EmailMessage class directly.
    """
    connection = connection or get_connection(
        username=auth_user,
        password=auth_password,
        fail_silently=fail_silently,
    )
    mail = EmailMultiAlternatives(subject, message, from_email, recipient_list, connection=connection)
    if html_message:
        mail.attach_alternative(html_message, ‘text/html‘)

    return mail.send()

settings.py配置

发送邮件之前先在setting.py配置文件里面配置相关的邮箱信息,比如我这里是用的QQ邮箱,使用SSL加密方式,需要授权码登录
(至于如何获取授权码,可以在QQ邮箱设置里面开启,发送短信“配置邮件客户端”到1069070069)

# settings.py
EMAIL_BACKEND = ‘django.core.mail.backends.smtp.EmailBackend‘

EMAIL_USE_SSL = True        # SSL加密方式
EMAIL_HOST = ‘smtp.qq.com‘   # 发送邮件的邮箱 的 SMTP服务器,这里用了163邮箱
EMAIL_PORT = 465    # SMTP服务器端口
EMAIL_HOST_USER = [email protected]‘   # 发件人
EMAIL_HOST_PASSWORD = ‘授权码‘   # 密码(这里使用的是授权码)
EMAIL_FROM = ‘yoyo<[email protected]>‘   # 邮件显示的发件人

如果是其它的企业邮箱,直接密码登录的话,使用TLS方式

EMAIL_USE_SSL = True
EMAIL_HOST = ‘smtp.xx.com‘  # 如果是其它企业邮箱
EMAIL_PORT = 25
EMAIL_HOST_USER = [email protected]‘ # 帐号
EMAIL_HOST_PASSWORD = ‘**********‘  # 密码
EMAIL_FROM = ‘yoyo<[email protected]>‘   # 邮件显示的发件人

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

views和urls.py

在views.py里面写个视图函数,调用发送邮件的功能

from django.http import HttpResponse
from django.core.mail import send_mail


def mail(request):
    send_mail(‘Subject here‘,             # 主题
              ‘Here is the message.‘,     # 正文
              [email protected]‘,         # 发件人
              [[email protected]‘],       # 收件人
              fail_silently=False)
    return HttpResponse(‘邮件发送成功,收不到就去垃圾箱找找吧!‘)

urls.py写个访问地址触发发邮件

from django.conf.urls import url
from hello import views

urlpatterns = [
    # 新增用户
    url(r‘^register/‘, views.register),
    url(r‘^login/‘, views.login),
    url(r‘^reset/‘, views.reset_psw),
   url(r‘^mail/‘, views.mail),
]

浏览器上访问http://localhost:8000/mail/后,就能收到邮件了

技术图片

发送html格式邮件看下一篇

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

python测试开发django(28)--发送附件EmailMessage

python 实现发送邮件的两种方式(send_mail模块发送,smtplib模块发送)

Google App Engine:如何使用 send_mail 发送 html

Django 收到错误:send_mail() 在发送邮件时收到了意外的关键字参数“fail_silently”

php使用smtp类发送邮件

如何在 Django 中测试 send_mail?