django 发送邮件,django celery 定时任务
申请163网易发送邮件权限
在框架中设置配置文件#配置邮件服务器
EMAIL _ back end= django。核心。邮件。后端。SMTP。电子邮件后端 #指定邮件后端
EMAIL_HOST=smtp.163.com #发邮件主机
EMAIL_PORT=25 #发邮件端口
EMAIL_HOST_USER=填你自己的邮箱 # 授权的邮箱
电子邮件主机密码=授权时候获得的那个密码 # 邮箱授权时获得的密码,非注册登录密码
EMAIL_FROM=随便填一点填你的邮箱 # 发件人抬头
EMAIL_USE_TLS=False #是否使用安全协议传输创建芹菜异步任务在芹菜_tasks/main.py主入口#芹菜的入口
从芹菜进口芹菜
# 把芹菜和框架进行组合,必须让芹菜能识别和加载框架的配置文件以及框架的类库
OS。环境。设置默认值( DJANGO _ SETTINGS _ MODULE , meiduo.settings.dev )
# 对框架框架执行初始化
进口框架
django.setup()
#创建芹菜实例生产者
芹菜_app=芹菜(梅朵)
#加载配置
芹菜_app.config_from_object(芹菜_tasks.config )
# 注册任务
芹菜_app.autodiscover_tasks([芹菜_tasks.email]) #有多个任务可写多个在芹菜_tasks/config.py配置文件中#芹菜配置文件
# 指定中间人、消息队列、任务队列、容器,使用存储
broker _ URL= redis://192。168 .204 .128/10
# 结果队列的链接地址
celery _ result _ back end= redis://127。0 .0 .1:6379/14 在芹菜_任务/邮件/任务。来自姜戈的py。核心。邮件导入发送邮件
从django.conf导入设置
从芹菜_tasks.main导入芹菜_app
@芹菜_ app。任务(名称=发送验证电子邮件,基本=我的任务)#名称起别名#基础的值为监听的那个类
极好的发送验证电子邮件(收件人电子邮件,验证网址):
定义发送邮件的任务
# send_mail(标题,普通邮件的正文,发件人,收件人列表,富文本邮件正文)
subject=填主题
#message=普通文本
#html_message是发送带超文本标记语言样式信息
html_message= p尊敬的用户您好!/p \
p感谢您使用xxxx。/p \
p您的邮箱为:%s。请点击此链接激活您的邮箱:/p \
p a href=%s %s a /p %(收件人电子邮件,验证url,验证网址)
发送邮件(主题,设置. EMAIL_FROM,[to_email],html_message=html_message)芹菜异步执行任务不全都是成功的,所以我们需要监听任务在芹菜_tasks/email/tasks.py加上下面的代码来自芹菜。任务导入任务
# 监听整个任务的钩子
类我的任务(任务):
def on_success(self,retval,task_id,args,kwargs):
打印("任务成功11111")
返回超级(我的任务,我自己).on_success(retval,task_id,args,kwargs)
def on_failure(self,exc,task_id,args,kwargs,einfo):
打印("任务失败")
# 可以记录到程序中或者任务队列中,让芹菜尝试重新执行
返回超级(我的任务,我自己).on_failure(exc,task_id,args,kwargs,einfo)
def after_return(self,status,retval,task_id,args,kwargs,einfo):
打印("这是在返回之后")
返回超级(我的任务,我自己).after_return(status,retval,task_id,args,kwargs,einfo)
def on_retry(self,exc,task_id,args,kwargs,einfo):
打印("这是重试")
返回超级(我的任务,我自己).on_retry(exc,task_id,args,kwargs,einfo)在框架视图视图文件中调用#创建日志输出器
logger=日志记录。获取记录器(“django”)
类电子邮件视图(LoginRequiredJSONMixin,视图):
添加邮箱
定义放(自身,请求):
#接收参数
json_str=request.body.decode()
json_dict=json.loads(json_str)
email=json_dict.get(email )
#校验参数
如果不是电子邮件:
返回HttpResponseForbidden(缺少电子邮件参数)
如果不是re.match(r^[a-z0-9][\w\.\-]*@[a-z0-9\-] (\ .[a-z]{2,5}){1,2}$ ,电子邮件):
返回HttpResponseForbidden(参数电子邮件有误)
# 将用户传入的邮箱保存到用户数据库的电子邮件字段中
尝试:
请求。用户。电子邮件=电子邮件
request.user.save()
例外情况为e:
logger.error(e)
返回JsonResponse({code:RETCODE .DBERR, errmsg :添加邮箱失败})
#发送邮箱验证邮件这里是调用邮件的
verify_url=www.baidu.com
Send _ verify _ email.delay (email,verify _ URL) #一定要加延迟!
返回JSON响应({code: retcode.ok, errmsg: ok})启动终端,输入命令启动芹菜:Celery-a Celery _ tasks . main worker-l info-p event let。在电子邮件页面中单击您发送电子邮件的按钮。测试,看看后台输出遇到的问题。1.仔细看send_mail(主题,设置边上的参考位置。email _ from,[to _ email],html_message=html _ message)。原代码中send _ mail收到的参数html _ message是最后一个。如果你打过来的时候不是关键词引用,对方会收到发来的短信。
2.启动芹菜后,您可能会报告一个错误。在这里,你可以阅读我博客上的另一篇文章,关于启动芹菜后发送邮件报告错误的解决方案。目前,根据我上面的代码,我可以正常和成功地发送和接收电子邮件。
3.在视图中调用邮件功能时,一定要加上延迟!绝对的!绝对的!绝对的!
-
签名:代码过万,键盘坏了!
如果你觉得这篇文章对你帮助不大,记得“推荐”一下。在此感谢!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。