python 发邮件携带附件

龙兴贤
2023-12-01
import os
import smtplib
import traceback
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import formataddr
from email.mime.application import MIMEApplication


# 发件人邮箱账号
my_sender = '
# user登录邮箱的用户名,password登录邮箱的密码(授权码,即客户端密码,非网页版登录密码),但用腾讯邮箱的登录密码也能登录成功
my_pass = ''
# 收件人邮箱账号

my_user = ''


def mail():
    ret = True
    try:
        #要添加的附件
        filePath = r"D:\pythonProject\Colgate差评明细清单(2021.12.13-2021.12.19).xlsx"
        # 邮件内容
        # 不带附件使用这个MIMEText('填写邮件内容测试', 'plain', 'utf-8'),带附件使用这个MIMEMultipart不加参数
        msg = MIMEMultipart()
        # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['From'] = formataddr(["fangzheng@cyberway.net.cn", my_sender])
        #处理多个收件人信息,list转字符串
        # msg['To']=Header(",".join(my_user))
        # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['To'] = formataddr(["xx", my_user])
        # 邮件的主题
        msg['Subject'] = "测试成功"
        # 邮件正文内容
        msg.attach(MIMEText('邮件发送测试……', 'plain', 'gbk'))

        #对附件进行封装
        # 附件名称 要发两个表?附件有三个 正文2个
        xlsxPart = MIMEText(open(filePath, 'rb').read(), '', 'gbk')
        xlsxPart["Content-Type"] = 'application/octet-stream'
        xlsxPart.add_header('Content-Disposition','attachment',filename=("gbk","", os.path.split(filePath)[-1]))
        msg.attach(xlsxPart)
        # SMTP服务器,腾讯企业邮箱端口是465,腾讯邮箱支持SSL(不强制), 不支持TLSc,
        # qq邮箱smtp服务器地址:smtp.qq.com,端口号:456
        # 163邮箱smtp服务器地址:smtp.163.com,端口号:25
        server = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)
        # 登录服务器,括号中对应的是发件人邮箱账号、邮箱密码
        server.login(my_sender, my_pass)
        # 发送邮件,括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.sendmail(my_sender, [my_user, ], msg.as_string())
        # 关闭连接
        server.quit()
    # 如果 try 中的语句没有执行,则会执行下面的 ret=False
    except Exception:
        print(traceback.format_exc())
        ret = False
    return ret


ret = mail()
if ret:
    print("邮件发送成功")
else:
    print("邮件发送失败")
 类似资料: