from aiosmtpd.controller import Controller import quopri from loguru import logger import re from clicker import Clicker import asyncio URL_PATTERN = re.compile(b'"(https://www.netflix.com/account/update-primary-location.*?)"', re.DOTALL) class NetflixHandler: async def handle_DATA(self, session, envelope, *args): logger.info('Message from %s' % envelope.mail_from) data = quopri.decodestring( envelope.content.decode('utf8', errors='replace') ) if urls := URL_PATTERN.findall(data): with Clicker() as browser: url = urls[0] logger.info(f'Found Update link: {url}') try: browser.click(url.decode()) except Exception as e: logger.error(e) return '250 Message accepted for delivery' server = Controller(handler=NetflixHandler, hostname='0.0.0.0', port=1025) server.start() logger.info('Netflix-clicker start.') while True: try: asyncio.run(asyncio.sleep(3)) except KeyboardInterrupt: server.stop()