53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
import smtplib
|
|
import traceback
|
|
from email.mime.multipart import MIMEMultipart
|
|
from email.mime.text import MIMEText
|
|
from jinja2 import FileSystemLoader, Environment, Template
|
|
|
|
from . import settings
|
|
|
|
|
|
class EmailPoster(object):
|
|
"""
|
|
邮件发送基础类
|
|
|
|
"""
|
|
|
|
@staticmethod
|
|
def get_template():
|
|
loader = FileSystemLoader('templates')
|
|
env = Environment(loader=loader)
|
|
template = env.get_template("default.html")
|
|
return template
|
|
|
|
def send(self, data: dict):
|
|
payload = data.get("payload", {})
|
|
if payload:
|
|
template = self.get_template()
|
|
content = template.render(payload=payload)
|
|
else:
|
|
content = data.get('body', '')
|
|
subject = data.get('subject', '')
|
|
mail_to = data.get('to', [])
|
|
mail_from = data.get('from', settings.MAIL_ADDRESS)
|
|
self._send(content, subject, mail_from, mail_to)
|
|
|
|
@staticmethod
|
|
def _send(content: str, subject: str, mail_from: str, mail_to: list):
|
|
msg_root = MIMEMultipart('related')
|
|
msg_text = MIMEText(content, 'html', 'utf-8')
|
|
msg_root.attach(msg_text)
|
|
msg_root['Subject'] = subject
|
|
msg_root['From'] = mail_from
|
|
msg_root['To'] = ";".join(mail_to)
|
|
|
|
try:
|
|
smtp = smtplib.SMTP_SSL(settings.MAIL_HOST, settings.MAIL_PORT)
|
|
# smtp.set_debuglevel(1)
|
|
smtp.ehlo()
|
|
smtp.login(settings.MAIL_USER, settings.MAIL_PW)
|
|
smtp.sendmail(settings.MAIL_ADDRESS, mail_to, msg_root.as_string())
|
|
smtp.quit()
|
|
except Exception as e:
|
|
print(traceback.format_exc(e))
|