python发送邮件

代码内容如下:

#!/usr/local/python3/bin/python3
# -*- coding: UTF-8 -*-

from email.header import Header
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.utils import parseaddr, formataddr
import smtplib
import os
import pathlib
import sys
import time


def send_email(smtp_info, to_list, cc_list=None, theme=None, content=None, file_list=None):
    def _format_addr(address):
        name, addr = parseaddr(address)
        return formataddr((Header(name, 'utf-8').encode(), addr))

    try:
        msg = MIMEMultipart()
        # 构建正文
        part_text = MIMEText(content)
        msg.attach(part_text)  # 把正文加到邮件体里面去
        msg['From'] = _format_addr('%s<%s>' % (smtp_info.get('username'), smtp_info.get('address')))
        msg['To'] = ','.join(to_list)
        if cc_list:
            to_list += cc_list
            msg['Cc'] = ','.join(cc_list)
        msg['Subject'] = Header(theme, 'utf-8').encode()
    
        for file_path in file_list:
            print(file_path)
            if os.path.isfile(file_path):
                # 构建邮件附件
                part_attach1 = MIMEApplication(open(file_path, 'rb').read())  # 打开附件
                part_attach1.add_header('Content-Disposition', 'attachment', filename=pathlib.Path(file_path).name)  # 为附件命名
                msg.attach(part_attach1)  # 添加附件
    
        s = smtplib.SMTP(smtp_info.get('server'), smtp_info.get('port'))
        s.ehlo()
        s.starttls()
        s.login(smtp_info.get('address'), smtp_info.get('password'))
        s.sendmail(smtp_info.get('address'), to_list, msg.as_string())
        s.quit()
    except Exception as error:
        print("发送失败, 请检查! 错误: {}".format(error))


if __name__ == "__main__":
    mail_theme = "测试邮件"
    mail_content = "测试邮件"

    smtp = {
        'server': "smtphm.qiye.163.com",
        'port': 25,
        'username': 'Zabbix Monitor Email',
        'address': 'zabbix@xxx.cn',
        'password': 'xxx',
    }
    to = [
        "xxx@xxx.cn"
    ]
    cc = [
        "xxx@xxx.cn"
    ]
    file = [
        './20210425.xls',
    ]
    send_email(
        smtp_info=smtp, to_list=to, cc_list=cc,
        theme=mail_theme, content=mail_content, file_list=file
    )