Python办公自动化实战之打造智能邮件发送工具

Written by

in

文章目录
  • 在数字化办公场景中,邮件自动化是提升工作效率的关键技能。本文将通过实际案例,演示如何使用Python的smtplib和email库构建一个支持图文混排、多附件、多收件人的智能邮件系统。无需复杂配置,只需跟随步骤操作,即可实现邮件自动化发送。
  • 授权码安全:建议定期更换邮箱授权码 文件路径:使用绝对路径或相对路径时注意工作目录 邮件大小:单个邮件附件建议不超过20MB 测试验证:发送测试邮件时建议使用自己的邮箱作为收件人 服务器限制:部分邮箱服务器有每日发送量限制 通过本文介绍的方案,可以实现从简单邮件到复杂邮件的自动化发送。实际使用中可根据需求添加模板引擎、数据库集成等功能,构建更完善的邮件自动化系统。 ​以上就是Python办公自动化实战之打造智能邮件发送工具的详细内容,更多关于Python智能邮件发送的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Python轻松实现批量邮件自动化详解 使用Python实现自动化办公的代码示例(邮件、excel) Python使用Yagmail库实现自动化邮件营销 Python办公自动化之发送电子邮件和Outlook集成 Python自动化办公之邮件发送全过程详解 Python自动化办公实战案例详解(Word、Excel、Pdf、Email邮件)
  • 目录
    • 前言
    • 一、基础配置:搭建邮件发送框架
      • 1.1 邮箱服务准备
      • 1.2 核心库导入
      • 1.3 基础发送函数
    • 二、进阶功能实现
      • 2.1 多附件处理
      • 2.2 图文混排实现
      • 2.3 多收件人优化
    • 三、完整实战案例
      • 3.1 场景描述
      • 3.2 完整代码实现
    • 四、扩展功能建议
      • 4.1 定时发送
      • 4.2 批量发送
      • 4.3 异常处理
    • 五、注意事项

      在数字化办公场景中,邮件自动化是提升工作效率的关键技能。本文将通过实际案例,演示如何使用Python的smtplib和email库构建一个支持图文混排、多附件、多收件人的智能邮件系统。无需复杂配置,只需跟随步骤操作,即可实现邮件自动化发送。

      以163邮箱为例,首先需要开启SMTP服务:

      • 登录邮箱后进入设置界面
      • 选择"POP3/SMTP/IMAP"选项
      • 开启SMTP服务并获取授权码(注意:授权码将替代登录密码使用)

      import smtplib
      from email.mime.multipart import MIMEMultipart
      from email.mime.text import MIMEText
      from email.mime.image import MIMEImage
      from email.header import Header
      

      def send_email(config):
          msg = MIMEMultipart()
          msg['From'] = config['sender']
          msg['To'] = ', '.join(config['receivers'])
          msg['Subject'] = Header(config['subject'], 'utf-8')
          
          # 添加正文
          msg.attach(MIMEText(config['body'], 'html', 'utf-8'))
          
          try:
              with smtplib.SMTP_SSL(config['smtp_server'], config['port']) as server:
                  server.login(config['sender'], config['password'])
                  server.sendmail(config['sender'], config['receivers'], msg.as_string())
              print("邮件发送成功")
          except Exception as e:
              print(f"发送失败: {str(e)}")
      

      def add_attachments(msg, file_paths):
          for file_path in file_paths:
              with open(file_path, 'rb') as f:
                  attachment = MIMEText(f.read(), 'base64', 'utf-8')
                  attachment['Content-Type'] = 'application/octet-stream'
                  attachment['Content-Disposition'] = f'attachment; filename="{file_path.split("/")[-1]}"'
                  msg.attach(attachment)
      

      def add_images(msg, image_paths):
          for img_path in image_paths:
              with open(img_path, 'rb') as f:
                  img = MIMEImage(f.read())
                  img.add_header('Content-ID', f'<{img_path.split("/")[-1]}>')
                  msg.attach(img)
      

      def validate_receivers(receivers):
          valid_emails = []
          for email in receivers:
              if '@' in email and '.' in email.split('@')[1]:
                  valid_emails.append(email)
          return valid_emails
      

      某公司需要向全体员工发送季度工作报告,要求包含:

      • PDF格式的正式报告
      • 业绩趋势图(PNG格式)
      • Excel格式的详细数据
      • 邮件正文需要包含图表引用

      def main():
          # 配置参数
          config = {
              'sender': 'your_email@163.com',
              'password': '授权码',
              'smtp_server': 'smtp.163.com',
              'port': 465,
              'receivers': ['test1@example.com', 'test2@example.com'],
              'subject': '2025年第二季度工作报告',
              'body': '''
              <h1>季度工作报告</h1>
              <p>附件包含详细数据,正文图表如下:</p>
              <img src="cid:业绩趋势图.png">
              '''
          }
       
          # 创建邮件对象
          msg = MIMEMultipart()
          msg['From'] = config['sender']
          msg['To'] = ', '.join(config['receivers'])
          msg['Subject'] = Header(config['subject'], 'utf-8')
       
          # 添加正文
          msg.attach(MIMEText(config['body'], 'html', 'utf-8'))
       
          # 添加附件
          add_attachments(msg, [
              './reports/季度数据.xlsx',
              './reports/正式报告.pdf'
          ])
       
          # 添加图片
          add_images(msg, [
              './charts/业绩趋势图.png'
          ])
       
          # 发送邮件
          send_email(config, msg)
       
      if __name__ == '__main__':
          main()
      

      结合schedule库实现定时任务:

      import schedule
      import time
       
      schedule.every().day.at("09:30").do(main)
       
      while True:
          schedule.run_pending()
          time.sleep(60)
      

      从CSV读取收件人信息:

      import pandas as pd
       
      def batch_send(csv_path):
          df = pd.read_csv(csv_path)
          for index, row in df.iterrows():
              config['receivers'] = [row['email']]
              config['body'] = f"尊敬的{row['name']},这是您的专属报告"
              main()
      

      添加重试机制和日志记录:

      import logging
      from retrying import retry
       
      logging.basicConfig(filename='email.log', level=logging.INFO)
       
      @retry(stop_max_attempt_number=3)
      def send_email_safe(config, msg):
          try:
              # 原有发送逻辑
              logging.info(f"成功发送至{config['receivers']}")
          except Exception as e:
              logging.error(f"发送失败: {str(e)}")
              raise
      

      • 授权码安全:建议定期更换邮箱授权码
      • 文件路径:使用绝对路径或相对路径时注意工作目录
      • 邮件大小:单个邮件附件建议不超过20MB
      • 测试验证:发送测试邮件时建议使用自己的邮箱作为收件人
      • 服务器限制:部分邮箱服务器有每日发送量限制

      通过本文介绍的方案,可以实现从简单邮件到复杂邮件的自动化发送。实际使用中可根据需求添加模板引擎、数据库集成等功能,构建更完善的邮件自动化系统。

      ​以上就是Python办公自动化实战之打造智能邮件发送工具的详细内容,更多关于Python智能邮件发送的资料请关注风君子博客其它相关文章!

      您可能感兴趣的文章:

      • Python轻松实现批量邮件自动化详解
      • 使用Python实现自动化办公的代码示例(邮件、excel)
      • Python使用Yagmail库实现自动化邮件营销
      • Python办公自动化之发送电子邮件和Outlook集成
      • Python自动化办公之邮件发送全过程详解
      • Python自动化办公实战案例详解(Word、Excel、Pdf、Email邮件)

      站内搜索