python 异步发送邮件 aiosmtplib

Posted ShawSpring

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 异步发送邮件 aiosmtplib相关的知识,希望对你有一定的参考价值。

aiosmtplib is an asynchronous SMTP client for use with asyncio.项目地址
与 smtplib的用法大体相同
for example

import asyncio
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
from email.header import Header
import aiosmtplib
import logging

def _format_addr(s): #格式化地址 也方便发送中文
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))


from_addr = ''
password = ''
to_addr = ''


async def sendemail(loop):
    title = '<html><body><h3>亲爱的<a data-auto-link="1" href="mailto:%s" target="_blank">%s</a>,您好:</h3>'%(to_addr,to_addr)
    reset = "<div style = 'padding-left:55px;padding-right:55px;font-family:'微软雅黑','黑体',arial;font-size:14px;'>重置密码</div>"
    body = '<p>请点击以下链接进行重置密码 <a href="%s">%s</a></p>'%(link,reset)
    tail = '如果您并不是Awesome用户,可能是其他用户误输入了您的邮箱地址。</body></html>'
    html = title+body+tail

    msg = MIMEText(html, 'html', 'utf-8')
    msg['From'] = _format_addr('Awesome Python Webapp <%s>' % from_addr)
    msg['To'] = _format_addr('亲爱的用户 <%s>' % to_addr)
    msg['Subject'] = Header('重置密码', 'utf-8').encode()

   try:
        async with aiosmtplib.SMTP(hostname=smtp_server, port=465,use_tls=True) as smtp:
            await smtp.login(from_addr,password)
            await smtp.send_message(msg)
    except aiosmtplib.SMTPException as e:
        logging.error('sendemail:%s'%e)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(sendemail(loop))

以上是关于python 异步发送邮件 aiosmtplib的主要内容,如果未能解决你的问题,请参考以下文章

Flask入门邮件同步与异步发送

python- flask current_app详解,与 current_app._get_current_object()的区别以及异步发送邮件实例

调整Exchange接收连接器延迟参数解决SMTP代发送邮件问题

PCB SQL SERVER 发送邮件(异步改同步)

请教怎么实现异步发送邮件

celery异步发送邮件