异步发送邮件

来源:10-3 AsyncHttpClient异步发送短信

杰神

2018-11-07

老师这里是使用AsyncHttpClient来实现异步发送短信。我现在写了一个发送邮件的功能,怎样改造成异步的呀?

import traceback
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

class MailUtils:
    def __init__(self):
        self.my_sender = "46702123@qq.com"
        self.my_pass = 'plcatbopsnyvcajb'  # 发件人邮箱密码(当时申请smtp给的口令)

    def send_register_email(self,email):
        my_user = email  # 收件人邮箱账号,我这边发送给自己
        msg = MIMEText("测试邮件内容", 'plain', 'utf-8')
        msg['From'] = formataddr(["app注册验证码", self.my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To'] = formataddr(["亲爱的用户", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject'] = "测试邮件主题"  # 邮件的主题,也可以说是标题
        try:
            print("开始发送邮件")
            server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是465
            server.login(self.my_sender, self.my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(self.my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
            print("邮件发送错误")
            traceback.print_exc(file=open('./mail.txt', 'w+'))

if __name__=="__main__":
    mail=MailUtils()
    mail.send_register_email("2343222224@qq.com")

写回答

2回答

bobby

2018-11-09

https://github.com/cole/aiosmtplib 用这个 或者如楼下所说的用celery,但是celery解决的是异步问题,并没有解决非阻塞的问题

0
0

叫我Accelerator

2018-11-08

扔到celery。。。

0
0

Tornado从入门到进阶 打造支持高并发的技术论坛

异步IO并发编程/Form,ORM/aiomysql、peewee-async/epoll

593 学习 · 350 问题

查看课程