我正在使用此代码登录我的Gmail帐户并从steampowered的电子邮件中检索文本。
else:
g = gmail.login(emailAddress, emailPassword)
# Check for emails until we get Steam Guard code
for i in range(0, 3):
mails = g.inbox().mail(sender="noreply@steampowered.com", unread=True)
if mails:
mail = mails[-1]
mail.fetch()
#print re.findall(r"you'll need to complete the process: ([A-Z0-9]{5})", mail.body)
guardCode = re.findall(r"you'll need to complete the process: ([A-Z0-9]{5})", mail.body)[0]
mail.read()
mail.delete()
g.logout()
return guardCode
else:
time.sleep(3)
我得到了
IndexError:列表索引超出范围
在这一行:
guardCode = re.findall(r"you'll need to complete the process: ([A-Z0-9]{5})", mail.body)[0]
这是因为
re.findall(r"you'll need to complete the process: ([A-Z0-9]{5})", mail.body)
返回
[]
所以列表是空的。为什么它是空的?
这是电子邮件的格式:
您是使用新浏览器还是Steam应用登录Steam?这里的 您需要完成此过程的Steam Guard代码:XXXXX< ----我需要这个
编辑:Gmail是来自here的自定义python模块。 编辑#2:以下是电子邮件的更好表示:
亲爱的XXX,
您是使用新浏览器还是Steam应用登录Steam?这里的 您需要完成此过程的Steam Guard代码:
XXXXX
如果您最近没有尝试从设备登录Steam 位于XXXX(美国),其他人可能正在尝试访问 你的帐户。您可以在线查看有关此登录尝试的更多信息。
如果您怀疑其他人可能试图访问您的帐户, 请:
答案 0 :(得分:2)
问题是因为’
中的you’ll
。它不是正常的单引号'
。
>>> s = "Are you logging into Steam using a new browser or Steam app? Here’s the Steam Guard code you’ll need to complete the process: XXXXX"
>>> re.findall(r"you’ll need to complete the process: ([A-Z0-9]{5})", s)
['XXXXX']
答案 1 :(得分:0)
我解决了我的问题。我最后删除了所有换行符,并将电子邮件正文作为整个字符串。感谢所有帮助过的人!
str = re.sub('\s+',' ', mail.body)
guardCode = re.findall(r'to complete the process: ([A-Z0-9]{5})', str)[0]