如何实现Python自动发送带附件的邮件?

NO.3 收藏Python自动发送带附件的邮件:高效办公自动化实践 在日常办公与数据管理中,定时发送带附件的邮件如日报表、数据备份是高频需求。Python凭借简洁的语法和丰富的库支持,可轻松实现这一自动化流程。将聚焦核心步骤,助你快速掌握Python自动发送带附件邮件的实现方法。 一、准备工作:环境与权限配置 实现邮件自动化的前提是成两项基础配置: 1. 开启SMTP服务:以主流邮箱为例如QQ邮箱,需登录邮箱后台开启“SMTP服务”,并获取授权码非登录密码,用于第三方应用登录。 2. 安装必要库:通过命令行执行 `pip install smtplib email`,安装用于邮件发送的`smtplib`库和构建邮件内容的`email`库。 二、核心代码:构建与发送邮件

2.1 连接SMTP服务器

首先需通过SMTP协议连接邮箱服务器,不同邮箱的服务器地址和端口不同:
  • QQ邮箱:服务器 `smtp.qq.com`,端口 `465`SSL加密
  • 163邮箱:服务器 `smtp.163.com`,端口 `465` 代码示例: ```python import smtplib from email.mime.multipart import MIMEMultipart # 构建多部分邮件 配置服务器信息 smtp_server = "smtp.qq.com" smtp_port = 465 sender_email = "你的邮箱@qq.com" sender_pwd = "你的授权码" # 替换为实际授权码 receiver_email = "收件人邮箱@example.com" ```

    2.2 构建邮件内容:与附件

    邮件需包含主题、和附件,通过`MIMEMultipart`对象整合: 1. 设置基本信息:主题Subject、发件人From、收件人To。 2. 添加:使用`MIMEText`定义文本内容,格式支持纯文本`'plain'`或HTML`'html'`。 3. 添加附件:通过`MIMEBase`读取本地文件,设置附件名称和编码格式。

    关键代码片段: ```python 创建邮件对象 msg = MIMEMultipart() msg["From"] = sender_email msg["To"] = receiver_email msg["Subject"] = "Python自动发送的带附件邮件" # 邮件主题

    添加 body = "这是Python自动发送的测试邮件,附件为数据报表。" msg.attach(MIMEText(body, "plain", "utf-8")) 添加附件以Excel文件为例 attachment_path = "数据报表.xlsx" # 附件本地路径 with open(attachment_path, "rb") as f: part = MIMEBase("application", "octet-stream") part.set_payload(f.read()) # 编码处理避免乱码 encoders.encode_base64(part) # 设置附件名称 part.add_header("Content-Disposition", f"attachment; filename={attachment_path}") msg.attach(part) ```

    2.3 发送邮件:连接与执行

    通过`smtplib.SMTP_SSL`建立加密连接,登录账户后发送邮件,最后关闭连接: ```python try: # 连接服务器并登录 server = smtplib.SMTP_SSL(smtp_server, smtp_port) server.login(sender_email, sender_pwd) # 发送邮件收件人可传入列表实现群发 server.sendmail(sender_email, receiver_email, msg.as_string()) print("邮件发送成功!") except Exception as e: print(f"发送失败:{e}") finally: server.quit() # 关闭连接 ``` 三、关键意事项
    • 附件路径:确保`attachment_path`为正确的本地绝对路径或相对路径,避免因文件不存在导致发送失败。
    • 编码格式:附件名称需通过`add_header`显式设置,否则可能出现中文乱码。
    • 异常处理:通过`try-except`捕获网络错误、授权失败等异常,提升程序稳定性。 通过以上步骤,即可用Python实现自动发送带附件的邮件。论是定时备份、报表分发还是通知提醒,这一技能都能显著提升工作效率,收藏备用。

延伸阅读: