python 異步發送郵件 aiosmtplib


aiosmtplib is an asynchronous SMTP client for use with asyncio.文檔地址
與 smtplib的用法大體相同

有幾個地方需要注意下:

  • 加密SMTP 有兩種
  1. 支持tls/ssl 擴展, 一般端口是587,比如gmail, 這是在普通連接上在進行擴展的.需要在SMTP實例化時傳參 use_tls=False,然后再smtp.starttls()
  2. 支持直接連接tls/ssl的,一般端口是465,操作簡單, 直接在 SMTP()實例化中 傳入 use_tls=True
  • 試了下,大部分smtp服務器需要登錄才能發送郵件,不然會報 authenticate的錯
  • 少部分smtp服務器需要授權碼,特別是企業郵箱,vip郵箱之類的. 等需要時再說
  • 常見郵箱服務器地址

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(to_addr ):
    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(to_addr ))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM