開発環境
- macOS Catalina - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング (Al Sweigart(著)、相川 愛三(翻訳)、オライリージャパン)の第Ⅱ部(処理の自動化)、16章(電子メールやSMSの送信)、16.9(演習プロジェクト)、16.9.3(自動退会幾)の解答を求めてみる。
コード
#!/usr/bin/env python3
import config
import ssl
import bs4
import webbrowser
import imapclient
import imaplib
import pyzmail
imaplib._MAXLINE = 10000000
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
imap_obj = imapclient.IMAPClient(
'imap.gmail.com', ssl=True, ssl_context=context)
imap_obj.login(config.my_email, config.my_password)
imap_obj.select_folder('INBOX', readonly=True)
uids = imap_obj.search(['BODY', 'unsubscribe'])
n = len(uids)
for i, uid in enumerate(uids, 1):
print(f'進捗状況 {i}/{n}...')
raw_messaes = imap_obj.fetch([uid], ['BODY[]'])
message = pyzmail.PyzMessage.factory(raw_messaes[uid][b'BODY[]'])
html_part = message.html_part
if html_part is None:
continue
html = html_part.get_payload().decode(html_part.charset)
soup = bs4.BeautifulSoup(html, features='lxml')
links = soup.select('a')
for link in links:
if 'unsubscribe' in link.getText():
webbrowser.open(link.attrs['href'])
0 コメント:
コメントを投稿