Python:如何访问GMail收件箱中的链接

时间:2016-10-26 15:05:11

标签: python python-2.7 python-3.x

我已经编写了登录邮件的代码。我是Python的新手。如何从GMail收件箱中的给定链接(https://nationalskillsregistry.com)获得响应。

import imaplib
import getpass
import email
import datetime

detach_dir = '.' # directory where to save attachments (default: current)
user = "something@gmail.com"
pwd = "password"
subject_filter='(SUBJECT "Daily News ")'

# connecting to the gmail imap server
m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login(user,pwd)
print "logged in successfully..."
m.select()
typ, data = m.search(None, subject_filter)
for num in data[0].split():
    rv, data = m.fetch(num, '(RFC822)')
    if rv != 'OK':
      print "ERROR getting message", num
      #return

msg = email.message_from_string(data[0][1])
print msg.get_payload(decode=True)
m.close()
m.logout()

这是我的邮件。

主题:每日新闻 - 宣布

身体:

请注意,如果您进行在线支付,则无需访问任何POS中心。您的帐户将立即续订。 如果您的帐户未立即续订,请等待24小时,然后检查有效期是否已延长。 请不要进行多次在线支付。请访问https://nationalskillsregistry.com

1 个答案:

答案 0 :(得分:0)

您需要执行两个步骤 - 从电子邮件中提取URL,然后在浏览器中打开它。

第1步将是困难的部分。我建议使用正则表达式来尝试解析电子邮件以提取URL。网上有很多资源可以帮助你解决这个问题。我最喜欢测试正则表达式的是RegExr 代码应该非常简单。

import re
 ...
expr = r'((http)s?:\/\/((\.)?\w+)+(\/\S*)*)'
#Parse with regex: Grabs possible URL (first only). Case insensitive.
matches = re.match( expr, msg, re.I)
url = matches[0]

Step 2 is easy enough -

import webbrowser

...

webbrowser.open(url)

或者,如果您要下载原始HTML:

import urllib2

...

response = urllib2.urlopen(url)
html = response.read()

如果您need to download a file,您可以使用urllib进行提升。

import urllib

...

urllib.urlretrieve ("http://www.example.com/songs/mp3.mp3", "mp3.mp3")

至于那个正则表达式,让我们分解一下:

(  (http)s?:\/\/((\.)?\w+)+(\/\S*)*  )  

首先,请注意它全部在括号中。括号表示它是一个捕获组,因此我们以后可以使用它。

(http)s?  

这将查找字符串' http',其可能有也可能没有''跟随它。

:\/\/

这将寻找':' - ' \'是因为' /'需要逃脱。

(\.)?\w+)+    #Grab everything between :// and /

这很有趣。它会查找一段时间(可选),然后是''字符''' - 字母或数字,不是标点符号或空格。
它将重复此次1次或更多次。这样做,它会抓住像
一样的字符串     amazon.com
    amazon.co.uk

(\/\S*)*

这将抓取以' /'开头的任意数量的字符串,并且可能包含跟随它们的字词。这就像是     /
    /家/
    /foo.html?q=bar