如何通过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
相关产品推荐
相关产品推荐

