python基础之发送带附件邮件

本文介绍了如何使用Python基础库发送带有附件的电子邮件,详细讲解了相关的步骤和代码实现,为初学者提供了清晰的指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import os,time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart


password = ""		# 授权码,非邮箱密码,在邮箱设置授权项操作
email_host = "smtp.qq.com"
send_user = "xx@qq.com"
send_to = "xx@qq.com"
email_port = '465'	# 带附件,故取465

def senEmail(file_new):
    # 读取最新的报告文件
    msg = MIMEMultipart()
    with open(file_new, 'rb')as filename:
        mail_body = filename.read()
    print('正文:',mail_body)

    # 定义文件正文
    msg.attach(MIMEText(mail_body, _subtype='html', _charset='utf-8'))
    # 定义标题
    msg['Subject'] = u'xxx测试报告'
    str_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
    msg['date'] = str_time
    # 添加附件
    att1 = MIMEText(open(file_new, 'rb').read(), 'base64', 'utf-8')
    att1['Conntent-Type'] = 'application/octet-stream'
    filename = file_new.split('/')
    att1["Content-Disposition"] = 'attachment; filename = ' + filename[-1] + ' ' #字符串内应用变量两种写法,或者'{}'.format(xx)
    # att1["Content-Disposition"] = 'attachment; filename = %s '%(filename[-1])
    msg.attach(att1)
    smtp = smtplib.SMTP_SSL(email_host,email_port)  # py3.7以上版本写法smtplib.SMTP_SSL(mail_host, 465),其他的smtplib.SMTP_SSL(),否则报错
    smtp.set_debuglevel(1)
    smtp.login(send_user, password)
    try:
        smtp.sendmail(send_user,send_to, msg.as_string())   # 加as_string(),不然报closed错
        print('邮箱发送成功!')
    except:
        print('发送不成功')
    smtp.quit()


"""获取最后一份报告文件并发送邮件"""


def sendReport():
    """获取最新的文件"""
    result_dir = './report/'
    lists = os.listdir(result_dir)
    lists.sort(key=lambda fn: os.path.getmtime(result_dir + fn) if not os.path.isdir(result_dir + fn) else 0)
    print(u'最新生成的报告' + lists[-1])
    # 找到最新生成的文件
    file_new = os.path.join(result_dir, lists[-1])
    senEmail(file_new)


if __name__ == '__main__':
    sendReport()

注:此文参考了其他博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值