Django项目之发送邮件

发送邮件配置信息

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 = 'python@163.com'
#在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'python123'
#收件人看到的发件人
EMAIL_FROM = 'python<python@163.com>'

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 查看详细执行过程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值