from typing import Type from mautrix.util.config import BaseProxyConfig, ConfigUpdateHelper from maubot import Plugin, MessageEvent from maubot.handlers import command import smtplib, ssl from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import email import email.encoders import re import datetime import locale class Config(BaseProxyConfig): def do_update(self, helper: ConfigUpdateHelper) -> None: helper.copy("sender_addr") helper.copy("sender_passwd") helper.copy("smtp_server") helper.copy("smtp_port") helper.copy("send_to") class MailBot(Plugin): async def start(self) -> None: #self.on_external_config_update() self.config.load_and_update() @command.new(name="mail") @command.argument("pattern", pass_raw=True, required=True) async def sendMail(self, evt: MessageEvent, pattern: str) -> None: await evt.mark_read() try: fullMail = pattern.split("\n", 1) subject = fullMail[0] body = fullMail[1] self.log.info("Connecting to " + self.config["smtp_server"]+", port : "+ str(self.config["smtp_port"])) smtp_server=smtplib.SMTP_SSL(self.config["smtp_server"],self.config["smtp_port"]) self.log.info("With user : " + self.config["sender_addr"]) smtp_server.login(self.config["sender_addr"], self.config["sender_passwd"]) msg = MIMEMultipart() user = re.search('@(.*):', evt.sender) msg['From'] = user.group(1) + " via ConDeBot<" + self.config["sender_addr"] + '>' self.log.info(msg['From']) msg['To'] = self.config["send_to"] msg['Subject'] = subject msg['Date'] = email.utils.formatdate(localtime=True) msg.attach(MIMEText(body)) self.log.info(msg.as_string()) smtp_server.sendmail(msg['From'],msg['To'],msg.as_string()) await evt.respond('Mail envoyé') except IndexError: if len(subject) == 0: await evt.respond("

!mail Object
Corps du message

", allow_html=True) else: self.log.error("Il manque le corps du mail") await evt.respond('Il manque le corps du mail') await evt.respond("

!mail Object
Corps du message

", allow_html=True) except Exception as e: self.log.error(str(e)) await evt.respond('Erreur envoi mail') await evt.respond("

!mail Object
Corps du message

", allow_html=True) def next_weekday(self, d, weekday): days_ahead = weekday - d.weekday() if days_ahead < 0: days_ahead += 7 return d + datetime.timedelta(days_ahead) @command.new(name="repet") @command.argument("pattern", pass_raw=True, required=True) async def repet(self, evt: MessageEvent, pattern: str) -> None: await evt.mark_read() try: locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8') #Mercredi jour = 2 nWed = self.next_weekday(datetime.date.today(), 2) subject = "Programme répet du " + nWed.strftime('%d %B') body = pattern if len(body) == 0: self.log.error("Il manque le corps du mail") await evt.respond('Il manque le corps du mail') await evt.respond("

!repet Corps du message

", allow_html=True) return self.log.info("Connecting to " + self.config["smtp_server"]+", port : "+ str(self.config["smtp_port"])) smtp_server=smtplib.SMTP_SSL(self.config["smtp_server"],self.config["smtp_port"]) self.log.info("With user : " + self.config["sender_addr"]) smtp_server.login(self.config["sender_addr"], self.config["sender_passwd"]) msg = MIMEMultipart() user = re.search('@(.*):', evt.sender) msg['From'] = user.group(1) + " via ConDeBot<" + self.config["sender_addr"] + '>' self.log.info(msg['From']) msg['To'] = self.config["send_to"] msg['Subject'] = subject msg['Date'] = email.utils.formatdate(localtime=True) msg.attach(MIMEText(body)) self.log.info(msg.as_string()) smtp_server.sendmail(msg['From'],msg['To'],msg.as_string()) await evt.respond('Mail envoyé') except Exception as e: self.log.error(str(e)) await evt.respond('Erreur envoi mail') await evt.respond("

!mail Object
Corps du message

", allow_html=True) @classmethod def get_config_class(cls) -> Type[BaseProxyConfig]: return Config