Files
mailBot/botMail.py
2023-11-15 09:51:55 +01:00

116 lines
4.7 KiB
Python

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("<p>!mail Object<br />Corps du message<p>", 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("<p>!mail Object<br />Corps du message<p>", allow_html=True)
except Exception as e:
self.log.error(str(e))
await evt.respond('Erreur envoi mail')
await evt.respond("<p>!mail Object<br />Corps du message<p>", 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("<p>!repet Corps du message<p>", 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("<p>!mail Object<br />Corps du message<p>", allow_html=True)
@classmethod
def get_config_class(cls) -> Type[BaseProxyConfig]:
return Config