如何在Django中使用IMAP_tools获取Gmail及其他邮箱的星标邮件
获取Gmail星标邮件的正确方法
你的代码存在两个核心问题:IMAP服务器地址错误,且没有筛选星标邮件的条件,以下是修正方案:
1. 修正IMAP服务器地址
Gmail的IMAP收件服务器是imap.gmail.com,而非你代码中使用的SMTP发件服务器smtp.gmail.com。
2. 添加星标邮件筛选逻辑
使用imap_tools的A.flagged()筛选器,即可只获取带星标(FLAGGED标记)的邮件。
3. 注意Gmail权限配置
- 前往Gmail设置的「转发和POP/IMAP」页面,启用IMAP功能;
- 若你的账号开启了两步验证,必须使用应用专用密码登录,不能用原账号密码。
修正后的完整代码:
from imap_tools import MailBox, A from django.http import HttpResponse def temp(request): # 替换为你的邮箱和应用密码/原密码 with MailBox('imap.gmail.com').login('admin@gmail.com', 'your_password_here', 'INBOX') as mailbox: star_messages = [] # 仅获取带星标的邮件 for msg in mailbox.fetch(A.flagged()): star_messages.append((msg.date, msg.subject, msg.html)) # 如果没有星标邮件,返回默认值,否则返回最后一封或全部(根据需求调整) temp = star_messages[-1] if star_messages else "empty" return HttpResponse(temp)
说明:
- 原代码中
temp会被循环覆盖,最终只保留最后一封邮件的数据,建议用列表star_messages存储所有星标邮件; A.flagged()是imap_tools内置的筛选规则,精准匹配星标邮件。
内容的提问来源于stack exchange,提问作者Sneha Makwana
相关产品推荐
相关产品推荐

