Django项目之发送邮件

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/linzi1994/article/details/83044711

发送邮件配置信息

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

1)登录后设置-POP3/SMTP/IMAP。

2)在新页面中点击“客户端授权密码”,勾选“开启”,弹出新窗口填写手机验证码。

3)填写授权码。

4)提示开启成功。
5 ) 在Django配置文件中,设置邮箱的配置信息

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# 其他邮箱服务器地址和端口,自行百度
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
#发送邮件的邮箱
EMAIL_HOST_USER = '[email protected]'
#在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'python123'
#收件人看到的发件人
EMAIL_FROM = 'python<[email protected]>'

6 ) 使用Django提供的模块发送邮件
django.core.mail模块提供了send_mail来发送邮件。
send_mail(subject, message, from_email, recipient_list,html_message=None)

  • subject 邮件标题
  • message 普通邮件正文, 普通字符串
  • from_email 发件人
  • recipient_list 收件人列表
  • html_message 多媒体邮件正文,可以是html字符串

异步发送邮件

发送验证邮件属于耗时操作,同样可以使用celery中异步执行

1. 在项目根目录下创建celery_tasks

2. 在celery_tasks目录下创建config.py文件,用于保存celery的配置信息

broker_url = "redis://127.0.0.1/14"

3. 在celery_tasks目录下创建main.py文件,用于作为celery的启动文件

from celery import Celery
import os

# 为celery使用django配置文件进行设置
if not os.getenv('DJANGO_SETTINGS_MODULE'):
	os.environ['DJANGO_SETTINGS_MODULE'] = '项目名称.settings.dev'

# 创建celery应用
app = Celery('随便起名')

# 导入celery配置
app.config_from_object('celery_tasks.config')

# 自动注册celery任务
app.autodiscover_tasks(['celery_tasks.email'])

4. 在celery_tasks目录下创建email

5. 在email目录下创建email/tasks.py文件(文件名必须是tasks),用于保存发送邮件的异步任务

from celery_tasks.main import app
import logging
from django.core.mail import send_mail
from django.conf import settings

# 获取在配置文件中定义的logger,用来记录日志
logger = logging.getLogger("django")


@app.task(name="send_verify_email")
def send_verify_email(token, email):
	"""
	发送邮件
	:param token: 加密token值
	:param email: 短信验证码
	:return: None
	"""
	verify_url = 'http://域名和端口/success_verify_email.html?token=' + token
	to_email = email
	subject = "XX公司邮箱验证"
	html_message = '<p>尊敬的用户您好!</p>' \
	               '<p>感谢您使用XX产品。</p>' \
	               '<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \
	               '<p><a href="%s">%s<a></p>' % (to_email, verify_url, verify_url)
	try:
		send_mail(subject=subject,  # 邮件标题
		          message="",  # 普通邮件正文
		          from_email=settings.EMAIL_FROM,  # 发件人
		          recipient_list=[to_email],  # 收件人
		          html_message=html_message  # 多媒体邮件正文
		          )
	except Exception as e:
		logger.error("发送邮件[异常][email: %s, message: %s ]" % (email, e))

6. 视图中调用异步发送邮件

# 伪代码 异步任务函数名.delay(参数1, 参数2)
send_verify_email.delay(token, email)

7.进入虚拟环境,切换到celery_tasks文件夹路径下,开启异步

celery -A celery_tasks.main worker -l info

参数解释:

  • -A celery_tasks.main 指定启动文件
  • worker 创建任务执行者
  • -l info 查看详细执行过程

猜你喜欢

转载自blog.csdn.net/linzi1994/article/details/83044711