Python中的使用smtplib异步发邮件

在进入正题之前,我们需要对一些基本内容有所了解:常用的电子邮件协议有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为这个异步所在的位置
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值