diff options
Diffstat (limited to 'service/pixelated/adapter/mail_service.py')
-rw-r--r-- | service/pixelated/adapter/mail_service.py | 73 |
1 files changed, 12 insertions, 61 deletions
diff --git a/service/pixelated/adapter/mail_service.py b/service/pixelated/adapter/mail_service.py index 48495d51..6949d6cb 100644 --- a/service/pixelated/adapter/mail_service.py +++ b/service/pixelated/adapter/mail_service.py @@ -13,79 +13,33 @@ # # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see <http://www.gnu.org/licenses/>. -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 -from pixelated.bitmask_libraries.session import LeapSessionFactory -from pixelated.bitmask_libraries.auth import LeapCredentials from pixelated.adapter.pixelated_mailbox import PixelatedMailbox from pixelated.adapter.tag import Tag -def open_leap_session(username, password, server_name): - try: - certs_home = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "certificates")) - - config = LeapConfig(certs_home=certs_home) - provider = LeapProvider(server_name, config) - session = LeapSessionFactory(provider).create(LeapCredentials(username, password)) - return session - except: - traceback.print_exc(file=sys.stdout) - raise - - class MailService: __slots__ = ['leap_session', 'account', 'mailbox_name'] - 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 + def __init__(self, mailboxes, mail_sender): + self.mailboxes = mailboxes + self.mail_sender = mail_sender @property def mailbox(self): - return PixelatedMailbox(self.account.getMailbox(self.mailbox_name)) + return self.mailboxes.inbox() def mails(self, query): + _mails = None + if not query: return self.mailbox.mails() - mails = [] if query['tags']: - tags = [Tag(tag) for tag in query['tags']] - for leap_mailbox_name in self.account.mailboxes: - mailbox = PixelatedMailbox(self.account.getMailbox(leap_mailbox_name)) - if len(mailbox.all_tags().intersection(tags)): - # mailbox has at least one mail with tag - for mail in mailbox.mails(): - if len(mail.tags.intersection(tags)) > 0: - mails.append(mail) - return mails + _mails = self.mailboxes.mails_by_tag(query['tags']) + + return sorted(_mails or [], key=lambda mail: mail.date, reverse=True) def update_tags(self, mail_id, new_tags): mail = self.mail(mail_id) @@ -113,17 +67,14 @@ class MailService: def _set_mail_flags(self, mail_id, flags, operation): observer = defer.Deferred() - leap_mailbox = self.account.getMailbox(self.mailbox_name) + leap_mailbox = self.mailboxes.leap_inbox_mailbox() self.mailbox.messages.set_flags(leap_mailbox, [mail_id], tuple(flags), operation, observer) 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)) + self.mail_sender.sendmail(mail) def all_tags(self): return self.mailbox.all_tags() |