【问题标题】:How to visit a link which is in inbox of Gmail?如何访问 Gmail 收件箱中的链接?
【发布时间】:2017-03-09 00:42:16
【问题描述】:

我已经编写了登录邮件的代码。如何从 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

【问题讨论】:

    标签: python


    【解决方案1】:

    您需要执行两个步骤 - 从电子邮件中提取 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”,它后面可能有也可能没有“s”。

    :\/\/
    

    这将寻找'://' - '\' 在那里,因为'/' 需要被转义。

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

    这一点很有趣。它会查找句点(可选),后跟“单词字符”——字母或数字,而不是标点符号或空格。
    它将重复此操作 1 次或多次。这样做时,它会抓取像
    这样的字符串 amazon.com
    amazon.co.uk

    (\/\S*)*
    

    这将抓取任意数量的以“/”开头的字符串,并且后面可能有单词。这就像
    /
    /主页/
    /foo.html?q=bar

    【讨论】:

    • 基本上,我不需要在浏览器中打开它。我需要从链接中获得响应,并且单击按钮时必须下载一个文件。
    • 更新了我的答案
    【解决方案2】:

    这很容易做到。你甚至不需要使用正则表达式。您应该阅读 bs4 这是一个网络爬虫,因此您可以获取列表中的所有链接,然后通过从列表中选择一个项目来找到您想要的正确链接链接 [5] 将返回链接编号 6,因为 python 从 0 计数到任何数字。当您尝试访问第 5 项但列表中只有 4 项时,这将引发 indexerror。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多