django 发送邮件,django celery 定时任务

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: