summaryrefslogtreecommitdiff
path: root/service/pixelated/adapter
diff options
context:
space:
mode:
authorDuda Dornelles <ddornell@thoughtworks.com>2014-08-28 14:57:46 -0300
committerDuda Dornelles <ddornell@thoughtworks.com>2014-08-28 17:00:38 -0300
commit42009ce9006a1c67df2dcebc6ff2002b36655682 (patch)
tree52fd264dbecb986f37b2d79a75c70b1d69804a87 /service/pixelated/adapter
parent5207cd71baabc3203d3f7982d98168469139327d (diff)
Neissi/Duda: sending emails. also moving local smtp creation to mail_service so we can use it later
Diffstat (limited to 'service/pixelated/adapter')
-rw-r--r--service/pixelated/adapter/mail_service.py27
-rw-r--r--service/pixelated/adapter/pixelated_mail.py27
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