89 lines
2.4 KiB
Python
89 lines
2.4 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import logging
|
|
import smtplib
|
|
from email.mime.text import MIMEText
|
|
|
|
from stacosys.core import imap
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class Mailer:
|
|
def __init__(
|
|
self,
|
|
imap_host,
|
|
imap_port,
|
|
imap_ssl,
|
|
imap_login,
|
|
imap_password,
|
|
smtp_host,
|
|
smtp_port,
|
|
smtp_starttls,
|
|
smtp_ssl,
|
|
smtp_login,
|
|
smtp_password,
|
|
):
|
|
self._imap_host = imap_host
|
|
self._imap_port = imap_port
|
|
self._imap_ssl = imap_ssl
|
|
self._imap_login = imap_login
|
|
self._imap_password = imap_password
|
|
self._smtp_host = smtp_host
|
|
self._smtp_port = smtp_port
|
|
self._smtp_starttls = smtp_starttls
|
|
self._smtp_ssl = smtp_ssl
|
|
self._smtp_login = smtp_login
|
|
self._smtp_password = smtp_password
|
|
|
|
def _open_mailbox(self):
|
|
return imap.Mailbox(
|
|
self._imap_host,
|
|
self._imap_port,
|
|
self._imap_ssl,
|
|
self._imap_login,
|
|
self._imap_password,
|
|
)
|
|
|
|
def fetch(self):
|
|
msgs = []
|
|
try:
|
|
with self._open_mailbox() as mbox:
|
|
count = mbox.get_count()
|
|
for num in range(count):
|
|
msgs.append(mbox.fetch_message(num + 1))
|
|
except Exception:
|
|
logger.exception("fetch mail exception")
|
|
return msgs
|
|
|
|
def send(self, to_email, subject, message):
|
|
|
|
# Create the container (outer) email message.
|
|
msg = MIMEText(message)
|
|
msg["Subject"] = subject
|
|
msg["To"] = to_email
|
|
msg["From"] = self._smtp_login
|
|
|
|
success = True
|
|
try:
|
|
if self._smtp_ssl:
|
|
s = smtplib.SMTP_SSL(self._smtp_host, self._smtp_port)
|
|
else:
|
|
s = smtplib.SMTP(self._smtp_host, self._smtp_port)
|
|
if self._smtp_starttls:
|
|
s.starttls()
|
|
s.login(self._smtp_login, self._smtp_password)
|
|
s.send_message(msg)
|
|
s.quit()
|
|
except Exception:
|
|
logger.exception("send mail exception")
|
|
success = False
|
|
return success
|
|
|
|
def delete(self, id):
|
|
try:
|
|
with self._open_mailbox() as mbox:
|
|
mbox.delete_message(id)
|
|
except Exception:
|
|
logger.exception("delete mail exception")
|