You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python3获取Gmail未读邮件?已掌握smtplib发信方法

接收邮件的实现方法

首先明确:smtplib库只负责发送邮件,没有接收邮件的相关方法(包括不存在你说的connection.getmail这类接口)。要接收邮件,得用Python内置的imaplib库(基于IMAP协议),下面是具体的实现示例:

用imaplib接收邮件的示例代码(以Gmail为例)

注意:Gmail需要先在账号设置里开启IMAP服务;如果开启了两步验证,得用应用专用密码登录,不能直接用原账号密码。普通邮箱一般直接用原密码即可。

import imaplib
import email
from email.header import decode_header

# 配置信息
email_addr = 'me@gmail.com'
email_passwd = '你的应用专用密码'  # Gmail需用应用密码,普通邮箱填原密码
imap_server = 'imap.gmail.com'
imap_port = 993

# 连接IMAP服务器
conn = imaplib.IMAP4_SSL(imap_server, imap_port)
conn.login(email_addr, email_passwd)

# 选择收件箱(这里选默认的INBOX)
conn.select('INBOX')

# 搜索未读邮件,换成'ALL'可以搜索所有邮件
status, msg_ids = conn.search(None, 'UNSEEN')
email_ids = msg_ids[0].split()

# 遍历并解析邮件
for id in email_ids:
    # 获取邮件的原始内容
    status, msg_data = conn.fetch(id, '(RFC822)')
    for part in msg_data:
        if isinstance(part, tuple):
            msg = email.message_from_bytes(part[1])
            # 解码邮件主题
            subject, encoding = decode_header(msg['Subject'])[0]
            if isinstance(subject, bytes):
                subject = subject.decode(encoding)
            # 获取发件人信息
            sender = msg.get('From')
            print(f"主题: {subject}")
            print(f"发件人: {sender}")
            # 处理邮件正文
            if msg.is_multipart():
                # 多部分邮件(带附件或富文本),只提取纯文本内容
                for sub_part in msg.walk():
                    content_type = sub_part.get_content_type()
                    disp = str(sub_part.get('Content-Disposition'))
                    try:
                        body = sub_part.get_payload(decode=True).decode()
                    except:
                        continue
                    if content_type == 'text/plain' and 'attachment' not in disp:
                        print(f"正文: {body}")
            else:
                # 纯文本邮件直接提取正文
                body = msg.get_payload(decode=True).decode()
                print(f"正文: {body}")
            print("---分割线---")

# 关闭连接
conn.close()
conn.logout()

重要提示

  1. 不同邮箱的IMAP服务器地址和端口可能不同,比如QQ邮箱的IMAP服务器是imap.qq.com,端口同样为993。
  2. 接收邮件的逻辑比发送复杂,因为要处理邮件的编码、多部分内容(比如附件、HTML正文)等,所以没有像sendmail那样极简的接口,必须走“连接服务器→选择邮箱→搜索邮件→获取内容→解析内容”这一套流程。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:50:39