Python实现邮箱自动监控与邮件收发详解

Nora
Nora
发布时间:2026-10-14| 3人浏览过
原创

本文介绍如何使用Python实现邮箱的自动监控与邮件处理。通过zmail库可快速获取最新邮件并提取主题及附件;同时结合smtplib、poplib等标准库,演示了构建完整邮件发送逻辑的方法,包括正文添加、附件处理及标题解码,为开发者提供实用的邮箱自动化操作参考。

Python邮箱监控与收发实现

以下直接展示相关代码实现。

使用zmail获取最新邮件


#zmail库:可以用几行代码帮我们收取一封邮件
import zmail
#输入账号和密码
server=zmail.server('13163964546@qq.com','jie110341')
#获取最新的一封邮件
mail=server.get_latest()
#读取邮件
#zmail.show(mail)
#读取邮件的部分内容
print(mail['subject'])
......
#读取附件 邮件 存放路径 如果有同名文件则覆盖
zmail.save_acctachment(mail,target_path=None,overwrite=True)

使用前需在电脑环境中安装zmail库。

补充说明:利用Python脚本实现对电脑邮箱的实时监控。

以下是具体的代码示例部分。

邮件发送与附件处理逻辑


import smtplib
import poplib
import email
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import decode_header
def send_email(account, password, email_title, send_text="", file_names=None, file_dir="."):
  msg = MIMEMultipart()
  # msg = MIMEText(HTML, 'html') -- 只能发送文本内容
  content = MIMEText(send_text, "plain", "utf-8")
  msg.attach(content)
  # 文件类型
  if isinstance(file_names, list):
    for file_name in file_names:
      send_file_path = file_dir + "/" + file_name
      part = MIMEApplication(open(send_file_path, 'rb').read())
      part.add_header('Content-Disposition', 'attachment', filename=file_name)
      msg.attach(part)
  elif isinstance(file_names, str):
    send_file_path = file_dir + "/" + file_names
    part = MIMEApplication(open(send_file_path, 'rb').read())
    part.add_header('Content-Disposition', 'attachment', filename=file_names)
    msg.attach(part)
  # msg['from'],msg['to']接收端显示的发件人与收件人
  msg['from'] = "奥巴马@163.com"
  msg['to'] = account
  msg['subject'] = email_title
  try:
    server = smtplib.SMTP()
    server.connect('smtp.163.com')
    server.login(account, password)
    # from_addr:发送地址; to_addrs:接收地址(字符串列表)
    server.sendmail(account, msg['to'].split(), msg.as_string())
  except Exception as e:
    print(e)
# 获取邮件标题
def get_email_subject(addr, password):
  # 设置连接网址,获取pop3协议的邮件读取对象
  read = poplib.POP3('pop.163.com', timeout=3600)
  # 输入邮件地址与邮件登录密码
  read.user(addr) # 163邮箱用户名
  read.pass_(password) # 163邮箱设置中的客户端授权密码
  # allEmails = (totalNum, totalSize)
  # 读取邮件信息(邮件总数,邮件尺寸)
  total_num, total_size = read.stat()
  # top(which,howmuch)
  # 获取最新的一封邮件(第几封邮件,获取多少封)
  top_email = read.top(total_num, 1)
  # print("***** start *****\n接收的数据为: {}\n***** end *****\n".format(top_email))
  #
  # print("***** start *****\n[解码前]获取的初始邮件内容: {}\n***** end *****\n".format(top_email[1]))
  # 解码邮件信息,将解码后的邮件信息存入tmp
  tmp = []
  for s in top_email[1]:
    tmp.append(s.decode())
  # print("***** start *****\n[解码后]的邮件内容为: {}\n*****  end  *****\n".format(tmp))
  # 将解码后的邮件内容拼接为字符串
  email_str = '\n'.join(tmp)
  # 将字符串类型解析为Message类型
  message = email.message_from_string(email_str)
  # print("***** start *****\n"
  #    "[解码前]的邮件字符串内容为: [数据类型]{}\n{}\n"
  #    "--------------------------------------------\n"
  #    "[解码后]的邮件字符串内容为: [数据类型]{}\n{}\n"
  #    "***** end *****\n"
  #    .format(type(email_str), email_str, type(message), message))
  # 获取邮件主题
  subject_str = message['subject']
  # print("***** start *****\n[解码前]邮件标题: {}\n***** end *****\n".format(subject_str))
  subject = decode_header(subject_str)
  # print("***** start *****\n[解码后]邮件标题: {}\n***** end *****\n".format(subject))
  content = subject[0][0]
  enc_type = subject[0][1]
  if enc_type:
    subject_decode = content.decode(enc_type)
  else:
    subject_decode = content
  return subject_decode, read, total_num

以上内容为个人经验分享,旨在提供参考。如有疏漏或错误,欢迎指正。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。