【发布时间】:2021-01-31 04:03:31
【问题描述】:
我正在尝试阅读 Gmail 中具有特定主题的电子邮件并获取电子邮件中的 OTP 值。我正在使用 imaplib
import imaplib
def get_CreateAccount_OTP(self, email_type):
gmail = imaplib.IMAP4_SSL("imap.gmail.com", 993)
gmail.login(self.gmail_username, self.gmail_password)
gmail.select('Inbox', readonly=True)
type, data = gmail.search(None, '(SUBJECT "Here\'s your Texas by Texas email verification.")')
我得到的类型返回为 Ok,但数据如下
data = {list: 1} [b'']
0 = {bytes: 0} b''
__len__ = {int} 1
在那一行之后,它不会进入下面的“for循环”
for num in data[0].split():
typ, data = gmail.fetch(num, '(RFC822)')
raw_email = data[0][1]
raw_email_string = raw_email.decode('utf-8')
email_message = str(email.message_from_string(raw_email_string))
email_message_list = email_message.split('\n')
RE_TIME_STAMP_PATTERN = re.compile((r'\d{6}'))
for line in email_message_list:
print(line)
if 'Your sign-in verification code is ' in line:
self.OTP = re.findall(RE_TIME_STAMP_PATTERN, line)[0]
break
self.log.info("OTP:",self.OTP)
return self.OTP
注意:我是 Python 新手,学习缓慢。请坦白我的愚蠢问题 提前致谢
【问题讨论】:
-
嗨!您在代码中使用Gmail IMAP 吗?另外,您对这段代码的实际意图是什么?您遇到的主要问题是什么,即数据没有进入 for 循环?您能否在
data[0]进入 for 循环之前记录它以确保问题不存在?您收到任何错误消息吗? -
嗨@MateoRandwolf,我正在使用iMaplib.py。我想阅读所有具有指定主题的电子邮件。但数据返回空。我用正文替换了主题,现在脚本正在运行。不确定主题方法是否错误。没有显示错误
-
很高兴您设法解决了您的问题。您能否将您的评论正式化为答案,以便其他有类似问题的用户可以轻松找到答案?谢谢 ! :D
-
它与我使用的脚本相同,问题在于字符串中的特殊字符。 “这是”一旦我删除了该文本,它就可以正常工作。现在我想尝试使用特殊字符,因为我将使用带有 Unicode ex 的西班牙语。 “Favoor de verificar su correo electronic”。 “ó”是 unicode,搜索方法不返回任何电子邮件。不知道如何处理特殊字符。此外,当字符串具有“'”字符时,不会返回任何电子邮件。感谢您的帮助
标签: python gmail-imap imaplib