django发送邮件setting设置及celery设置

来源:互联网 发布:linux 当前目录大小 编辑:程序博客网 时间:2024/05/21 18:33

发送邮件的邮箱设置

在setting中进行如下设置

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'  # 每个邮箱都有不同的服务器 163邮箱为smtp.163.com,qq邮箱为smtp.qq.com EMAIL_HOST = 'smtp.aliyun.com' EMAIL_PORT = 25  # 发送源即发送邮件的邮箱EMAIL_HOST_USER = 'XXX@aliyun.com' # 在邮箱中设置的客户端授权密码  # 如果是aliyun邮箱这个是你账号的密码,如果是163/126邮箱或qq邮箱这个是授权码,# 163/126的授权码会在你开通SMTP服务时自行设置,qq邮箱会分配一个授权码。EMAIL_HOST_PASSWORD = '' # qq邮箱此值为True,aliyun此值为False,163可以忽略此值EMAIL_USE_TLS = False  #这个邮箱必须和上面的发送源邮箱相同。EMAIL_FROM = '发送人<XXX@aliyun.com>'

163邮箱开通SMTP

进入163邮箱找到
这里写图片描述
全部勾选后保存
这里写图片描述
其他邮箱也是类似的操作只不过获取授权码的方式有所不同

celery异步发送邮件

首先安装
celery[redis]
django-celery
在要发送邮件的app文件夹下创建tasks.py文件编写如下内容

from celery.task import taskfrom django.core.mail import send_mailfrom django.conf import settings# 用装饰器装饰发送邮件的函数@task  def send_msg(email):      # send_mail的第一个参数为:主标题;    # 第二个参数为:文本内容;    # 第三个参数为发送源邮箱;    # 第四个参数为一个列表或元组表示要发送给哪个邮箱可以是多个;    # 第五个参数为:可以将html标签翻译如a标签中如果有href属性他的内容就可以被点击。    # 注意:第二个参数和第五个参数不能同时存在,如果同时存在第五个参数会覆盖掉第二个参数中的内容。    send_mail(          "标题", "不能够翻译html标签的内容",          settings.EMAIL_HOST_USER, (email,),          html_message="<a href='127.0.0.1/index/'>html_message这是一个能够翻译html标签的内容</a>"      )

然后再视图函数中导入上述的send_msg
调用send_msg.delay(email) 将要发送的邮箱传入

最后在setting中进行如下设置

import djcelery  # 在INSTALLED_APPS中注册djcelery  djcelery.setup_loader()  BROKER_URL = 'redis://127.0.0.1:6379/3' # redis所在的主机ip和端口号最后面是数据库 CELERY_IMPORTS = ('apps.users.tasks') # 设置路径让celery能找到tasks文件

建议:每次修改setting是重启服务器,发送邮件时不要乱发,用自己的邮箱验证即可。

能力有限,仅供参考,如有错误请留言,会及时修改

原创粉丝点击