在进入正题之前,我们需要对一些基本内容有所了解:常用的电子邮件协议有SMTP、POP3、IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25、110和143建立连接。
Python内置对SMTP的支持,该协议支持发送纯文本邮件、HTML邮件以及带附件的邮件,
Python的smtplib,email模块都支持该协议。
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。
smtplib模块主要负责发送邮件,email模块主要负责构造邮件。
smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。
email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。
1、下载smtplib安装包
pip install smtplib
2、启动celery
import os
import sys
from celery import Celery
# 执行celery命令时, 需要进入CELERY_BASE_DIR目录执行.
# celery项目中的所有导包地址, 都是以CELERY_BASE_DIR为基准设定.
CELERY_BASE_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, CELERY_BASE_DIR) # 增加导包路径
# 定义celery实例, 需要的参数, 1, 实例名,
app = Celery('django_wbxt',broker='redis://127.0.0.1:6379/14',backend='redis://127.0.0.1:6379/15')
#默认生产使用redis的14号库
3、封装好邮件的函数
@app.task #把这个函数注册给celery
def send_email(sender,receivers,subject,content):
import smtplib
mail_host = 'smtp.qq.com' # 发送邮件服务器
mail_user = '625569837@qq.com' # 登录名
mail_pass = 'gngcdjsamhuzbfgc' # 授权码,在邮件的设置里打开pop3
# sender = '625569837@qq.com' #发送人
# receivers = ['625569837@qq.com'] #接受人
# subject='' #标题
# content='' #内容
message = """From: %s
To: %s
Subject: <%s>
%s
"""%(sender,receivers[0],subject,content)
#message代表发送内容,from来自谁,to发给谁,subject邮件标题,最后是发送内容
smtpObj = smtplib.SMTP(mail_host) # 连接服务器
smtpObj.login(mail_user, mail_pass) # 登录,输入用户名和密码
smtpObj.sendmail(sender, receivers, message) # 发送邮件,第一个是谁发,第二个是谁接受,第三个是发送内容
print("Successfully sent email")
return 'Successfully sent email'
4、在test.py文件中调用封装好的函数
from celery_task.main import send_sms, send_email
send_email('625569837@qq.com',['625569837@qq.com'],'Dear kevin','I love you') #传入对应的参数
res=send_email.delay('625569837@qq.com',['625569837@qq.com'],'Dear kevin','I love you')
print(res)
5、启动celery命令
celery -A celery_task.main worker -l info -P eventlet #celery_task.main为这个异步所在的位置