我正在尝试在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的新手,正在慢慢学习它。请回答我的愚蠢问题 预先感谢
答案 0 :(得分:0)
我发现了字符串具有特殊char且implib无法将char转换为Unicode的问题。因此,我必须删除字符串中包含特殊字符的单词。
import imaplib
def get_CreateAccount_OTP(self, email_type):
subject="your Texas by Texas email verification."
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, '(UNSEEN SUBJECT "%s")' % subject)
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