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

如何通过IMAP获取邮件的发件人Gmail邮箱地址(Python实现)

获取Gmail邮件的发件人邮箱地址

嘿,这事儿不难,我帮你把代码补上就行!你已经完成了搜索邮件的步骤,接下来只需要遍历找到的邮件UID,解析每封邮件的发件人信息,再提取出里面的邮箱地址就好。

下面是修改后的完整代码,我加了详细注释:

import imaplib
import email
from email.utils import parseaddr  # 导入解析发件人地址的工具函数

mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('myemail', 'mypassword')
mail.list()
mail.select('inbox')

# 搜索主题包含"[News]"的邮件
result, data = mail.uid('search', None, '(HEADER Subject "[News]")')

if result == 'OK':
    # 拆分得到所有邮件的UID列表
    uids = data[0].split()
    
    for uid in uids:
        # 根据UID获取邮件的原始内容(RFC822格式)
        result, mail_data = mail.uid('fetch', uid, '(RFC822)')
        
        if result == 'OK':
            # 解析邮件对象(Python3.5+用bytes解析没问题)
            msg = email.message_from_bytes(mail_data[0][1])
            
            # 获取发件人字段,格式可能是"张三 <zhangsan@gmail.com>"这种
            from_field = msg.get('From')
            
            # 解析发件人,直接拆分出(姓名,纯邮箱地址)的元组
            sender_name, sender_email = parseaddr(from_field)
            
            # 可以直接输出,或者筛选出@gmail.com结尾的地址
            if sender_email.endswith('@gmail.com'):
                print(f"找到Gmail发件人:{sender_email}")
            else:
                print(f"非Gmail发件人:{sender_email}")

# 用完记得关闭IMAP连接
mail.logout()

关键细节说明:

  • parseaddr() 是Python自带的工具函数,专门处理带姓名的邮箱格式,不用自己写正则匹配,既省心又准确。
  • message_from_bytes() 适配Python3的字节数据解析,完全兼容你用的3.5.4版本。
  • 最后加了logout():用完IMAP连接记得关闭,避免不必要的资源占用~

内容的提问来源于stack exchange,提问作者Mr. David

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:30:09