diff options
Diffstat (limited to 'service/pixelated/adapter')
-rw-r--r-- | service/pixelated/adapter/mail_service.py | 27 | ||||
-rw-r--r-- | service/pixelated/adapter/pixelated_mail.py | 27 |
2 files changed, 48 insertions, 6 deletions
diff --git a/service/pixelated/adapter/mail_service.py b/service/pixelated/adapter/mail_service.py index 5a60d1bb..416c7bfc 100644 --- a/service/pixelated/adapter/mail_service.py +++ b/service/pixelated/adapter/mail_service.py @@ -16,6 +16,8 @@ import traceback import sys import os +import smtplib +from pixelated.bitmask_libraries.smtp import LeapSmtp from twisted.internet import defer from pixelated.bitmask_libraries.config import LeapConfig from pixelated.bitmask_libraries.provider import LeapProvider @@ -44,8 +46,27 @@ class MailService: def __init__(self, leap_session): self.leap_session = leap_session self.account = leap_session.account + self.user_email = leap_session.account_email() self.mailbox_name = 'INBOX' + def start(self): + try: + self.smtp_server = self._create_smtp_server() + self.smtp_client = self._create_smtp_client(self.smtp_server.smtp_info()) + except: + traceback.print_exc(file=sys.stdout) + raise + + def _create_smtp_server(self): + server = LeapSmtp(self.leap_session.provider, self.leap_session.nicknym.keymanager, self.leap_session.srp_session) + server.start() + return server + + def _create_smtp_client(self, smtp_info): + smtp_servername, smtp_port = smtp_info + client = smtplib.SMTP(smtp_servername, smtp_port) + return client + @property def mailbox(self): return PixelatedMailbox(self.account.getMailbox(self.mailbox_name)) @@ -98,6 +119,12 @@ class MailService: def mail(self, mail_id): return self.mailbox.mail(mail_id) + def send(self, mail): + _from = self.user_email + _to = mail.get_to() + + self.smtp_client.sendmail(_from, _to, mail.to_smtp_format(_from=_from)) + def all_tags(self): return self.mailbox.all_tags() diff --git a/service/pixelated/adapter/pixelated_mail.py b/service/pixelated/adapter/pixelated_mail.py index 547927a6..e43d5510 100644 --- a/service/pixelated/adapter/pixelated_mail.py +++ b/service/pixelated/adapter/pixelated_mail.py @@ -38,6 +38,12 @@ class PixelatedMail: mail.tags = mail._extract_tags() return mail + def set_from(self, _from): + self.headers['from'] = [_from] + + def get_to(self): + return self.headers['to'][0] + def _extract_status(self): return Status.from_flags(self.leap_mail.getFlags()) @@ -80,11 +86,20 @@ class PixelatedMail: mime_multipart.attach(MIMEText(self.body, 'plain')) return mime_multipart + def to_smtp_format(self, _from=None): + mime_multipart = self.to_mime_multipart() + mime_multipart['From'] = _from + return mime_multipart.as_string() + @staticmethod def from_dict(mail_dict): - mail = PixelatedMail() - mail.headers = mail_dict['header'] - mail.body = mail_dict['body'] - mail.ident = mail_dict['ident'] - mail.tags = mail_dict['tags'] - return mail + return from_dict(mail_dict) + + +def from_dict(mail_dict): + mail = PixelatedMail() + mail.headers = mail_dict['header'] + mail.body = mail_dict['body'] + mail.ident = mail_dict['ident'] + mail.tags = mail_dict['tags'] + return mail |