ticketfrei3/kibicara/platforms/email/bot.py
2020-07-17 15:51:14 +02:00

49 lines
1.7 KiB
Python

# Copyright (C) 2020 by Maike <maike@systemli.org>
#
# SPDX-License-Identifier: 0BSD
from kibicara.platforms.email.model import EmailSubscribers, Email
from kibicara.platformapi import Censor, Spawner
from kibicara.email import send_email
from kibicara.config import config
from kibicara.webapi.admin import to_token
from smtplib import SMTPException
from logging import getLogger
logger = getLogger(__name__)
class EmailBot(Censor):
def __init__(self, email_model):
super().__init__(email_model.hood)
self.model = email_model
self.messages = []
async def run(self):
""" Loop which waits for new messages and sends emails to all subscribers. """
while True:
message = await self.receive()
for subscriber in EmailSubscribers.objects.filter(hood=self.hood.id):
token = to_token(email=subscriber.email, hood=self.hood.id)
unsubscribe_link = (
config['root_url']
+ 'api/hoods/%d/email/unsubscribe/' % self.hood.id
+ token
)
message.text += (
"\n\n--\nIf you want to stop receiving these mails, "
"follow this link: " + unsubscribe_link
)
try:
send_email(
subscriber.email,
"Kibicara " + self.hood.name,
body=message.text,
)
except (ConnectionRefusedError, SMTPException):
logger.exception("Sending subscription confirmation email failed.")
spawner = Spawner(Email, EmailBot)