You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改Python邮件代码实现多附件添加?现有代码仅将文件放入正文

没问题!我帮你调整代码,让它既能把指定文件内容放到邮件正文,又能轻松添加多个附件。下面是修改后的完整代码,关键改动我都标出来了:

完整修改后的代码

#!/usr/bin/python3
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

def read_files(file_list):
    data = ''
    for filename in file_list:
        with open(filename, 'r', encoding='utf-8') as file:  # 加上编码避免中文乱码
            data += file.read() + '\n\n'  # 每个文件内容间加换行,正文排版更清晰
    return data

def add_attachments(msg, attachment_list):
    # 遍历附件列表,逐个添加到邮件
    for file_path in attachment_list:
        with open(file_path, 'rb') as attachment:
            # 创建附件对象并编码
            part = MIMEBase('application', 'octet-stream')
            part.set_payload(attachment.read())
            encoders.encode_base64(part)
            # 设置附件文件名和头部信息
            part.add_header(
                'Content-Disposition',
                f'attachment; filename="{file_path.split("/")[-1]}"',
            )
            msg.attach(part)

def send_mail(header, body, attachment_list=None):
    # 创建多部分邮件容器(支持正文+附件)
    msg = MIMEMultipart()
    msg['Subject'] = header['Subject']
    msg['From'] = header['From']
    msg['To'] = header['To']  # 这里填收件人邮箱,比如 "xxx@example.com"

    # 添加邮件正文
    text_part = MIMEText(body, 'html')
    msg.attach(text_part)

    # 如果有附件列表,执行添加逻辑
    if attachment_list and len(attachment_list) > 0:
        add_attachments(msg, attachment_list)

    # 发送邮件(根据你的邮箱服务商调整SMTP参数)
    try:
        with smtplib.SMTP('smtp.example.com', 587) as server:  # 替换成你的SMTP服务器地址
            server.starttls()  # 启用TLS加密
            server.login(header['From'], 'your_email_auth_code')  # 替换成邮箱授权码/密码
            server.send_message(msg)
        print("邮件发送成功!")
    except Exception as e:
        print(f"邮件发送失败:{str(e)}")

# ------------------- 使用示例 -------------------
if __name__ == '__main__':
    # 邮件头部配置
    email_header = {
        'Subject': '带正文和多附件的测试邮件',
        'From': 'your_email@example.com',
        'To': 'recipient@example.com'
    }
    # 要放到正文里的文件列表
    body_files = ['content1.txt', 'content2.html']
    email_body = read_files(body_files)
    # 要添加的附件列表
    attachments = ['report.pdf', 'data.xlsx', 'image.jpg']
    # 发送邮件
    send_mail(email_header, email_body, attachments)

关键改动说明

  • 改用MIMEMultipart作为邮件主容器:原来的MIMEText只能处理纯文本/HTML正文,MIMEMultipart可以同时容纳正文和多个附件,是多内容邮件的标准处理方式
  • 新增add_attachments函数:专门封装附件添加逻辑,遍历列表就能批量添加,避免重复代码
  • 优化read_files函数:增加编码参数防止中文乱码,给每个文件内容间加换行,提升正文可读性
  • 完善SMTP发送逻辑:用with语句自动管理连接,加异常捕获方便排查发送失败的问题

使用注意事项

  • 替换代码中的SMTP服务器地址(比如QQ邮箱是smtp.qq.com,163邮箱是smtp.163.com)和端口号(一般为587)
  • 邮箱密码建议用授权码(各大邮箱都支持生成,比明文密码更安全)
  • 确保正文文件和附件文件的路径正确,或者直接放在脚本同一目录下

内容的提问来源于stack exchange,提问作者Milister

火山引擎 最新活动