版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/linzi1994/article/details/83044711
发送邮件配置信息
Django中内置了邮件发送功能,被定义在django.core.mail模块中。发送邮件需要使用SMTP服务器,常用的免费服务器有:163、126、QQ,下面以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 查看详细执行过程