48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
import smtplib
|
|
import email
|
|
import email.utils
|
|
|
|
from urllib.parse import urlparse
|
|
|
|
from dbsettings.functions import getValue
|
|
|
|
class BaseMailProvider:
|
|
@property
|
|
def get_name(self):
|
|
return "Base Mail Provider"
|
|
|
|
@property
|
|
def get_logo(self):
|
|
return ""
|
|
|
|
def send_message(self, message):
|
|
raise NotImplementedError(f"{type(self)} does not implement send_message()!")
|
|
|
|
def send_mail(self, subject, content, recipients, cc=[], bcc=[], headers={}, sender=getValue("core.mail.sender", "expephalon@localhost")):
|
|
message = email.message_from_string(content)
|
|
headers["From"] = sender
|
|
headers["To"] = recipients if type(recipients) == str else ",".join(recipients)
|
|
headers["Cc"] = cc if type(cc) == str else ",".join(cc)
|
|
headers["Bcc"] = bcc if type(bcc) == str else ",".join(bcc)
|
|
headers["Subject"] = subject
|
|
headers["Message-ID"] = email.utils.make_msgid("expephalon", urlparse(getValue("core.base_url", "http://localhost/").split(":")[1]).netloc)
|
|
headers["Date"] = email.utils.formatdate()
|
|
for header, value in headers.items():
|
|
if value:
|
|
message.add_header(header, value)
|
|
|
|
message.set_charset("base64")
|
|
return self.send_message(message)
|
|
|
|
class SMTPMailProvider(BaseMailProvider):
|
|
def __init__(self, host=getValue("core.smtp.host", "localhost"), port=int(getValue("core.smtp.port", 0)), username=getValue("core.smtp.username", "") or None, password=getValue("core.smtp.password", "")):
|
|
self.smtp = smtplib.SMTP(host, port)
|
|
if username:
|
|
self.smtp.login(username, password)
|
|
|
|
@property
|
|
def get_name(self):
|
|
return "SMTP Mail"
|
|
|
|
def send_message(self, message):
|
|
return self.smtp.send_message(message, rcpt_options=['NOTIFY=SUCCESS,DELAY,FAILURE'])
|