通过电子邮件搜索并打开退订链接

时间:2018-07-16 21:01:27

标签: python python-3.x

我目前正在从事《无聊的东西自动化》中的一个项目,我应该编写一个程序,该程序可以扫描我的电子邮件并找到退订链接并在浏览器中打开它们。

这是我现在拥有的代码,但是我不确定为什么它不会在新的浏览器中打开任何电子邮件。任何帮助将不胜感激。

#! Python3
# Write a program that scans through your email account,finds all the
# unsubscribe links in all your emails, and automatically opens them in a browser.

import imapclient
import pyzmail
import webbrowser
import bs4

# User input
user_email = input('Enter your email: ')
user_pass = input('Enter your password: ')

# Connects to IMAP Server
imap_obj = imapclient.IMAPClient('imap.gmail.com', ssl=True)
imap_obj.login(user_email, user_pass)
imap_obj.select_folder('INBOX', readonly=True)
UIDs = imap_obj.gmail_search('after:2018/07/13 before:2018/07/14 unsubscribe')
raw_messages = imap_obj.fetch(UIDs, ['BODY[]'])

for i in UIDs:
    message = pyzmail.PyzMessage.factory(raw_messages[i][b'BODY[]'])
    raw_soup = message.html_part.get_payload().decode(message.html_part.charset)
    soup = bs4.BeautifulSoup(raw_soup, 'html.parser')
    for unsub in soup.findAll('a'):
        print(unsub)
        break
        if 'Unsubscribe' in unsub:
            webbrowser.open(unsub)

imap_obj.logout()

1 个答案:

答案 0 :(得分:1)

您需要检查元素文本中是否有“取消订阅”。 in在不可迭代的事物(如bs4元素标签)上无法按预期工作。

    soup = bs4.BeautifulSoup(raw_soup, 'html.parser')
    for unsub in soup.find_all('a'):
        print((unsub.text, unsub.get('href')))
        if 'unsubscribe' in unsub.text.lower():
            webbrowser.open(unsub.get('href'))

(请注意最后一行中的unsub.href,您需要访问这些标签的属性,而不是对标签本身的引用)