From 304bebf1476012afa92e7df594cc0c0c24c84462 Mon Sep 17 00:00:00 2001 From: Jabrail Lezgintsev Date: Wed, 23 May 2018 14:25:44 +0300 Subject: [PATCH] Minor refactoring, added logic for sending mails to models.py. --- django_mailbox/models.py | 19 ++++++++++++++++++- django_mailbox/transports/__init__.py | 1 + django_mailbox/transports/smtp.py | 10 +++++----- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/django_mailbox/models.py b/django_mailbox/models.py index 9f7ffc2..b4ee357 100644 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -34,7 +34,7 @@ from django_mailbox import utils from django_mailbox.signals import message_received from django_mailbox.transports import Pop3Transport, ImapTransport, \ MaildirTransport, MboxTransport, BabylTransport, MHTransport, \ - MMDFTransport, GmailImapTransport + MMDFTransport, GmailImapTransport, SMTPTransport logger = logging.getLogger(__name__) @@ -213,6 +213,14 @@ class Mailbox(models.Model): ssl=self.use_ssl ) conn.connect(self.username, self.password) + elif self.type == 'smtp': + conn = SMTPTransport( + self.location, + port=self.port if self.port else None, + ssl=self.use_ssl, + tls=self.use_tls + ) + conn.connect(self.username, self.password) elif self.type == 'maildir': conn = MaildirTransport(self.location) elif self.type == 'mbox': @@ -420,6 +428,14 @@ class Mailbox(models.Model): else: self.save() + def send_mail(self, subject, to, body): + connection = self.get_connection() + if not connection: + return + connection.connect(self.username, self.password) + connection.send_message(subject, body, self.username, to) + return 'Success' + def __str__(self): return self.name @@ -821,3 +837,4 @@ class MessageAttachment(models.Model): class Meta: verbose_name = _('Message attachment') verbose_name_plural = _('Message attachments') + diff --git a/django_mailbox/transports/__init__.py b/django_mailbox/transports/__init__.py index 7aeef95..f2cf3e4 100644 --- a/django_mailbox/transports/__init__.py +++ b/django_mailbox/transports/__init__.py @@ -8,3 +8,4 @@ from django_mailbox.transports.babyl import BabylTransport from django_mailbox.transports.mh import MHTransport from django_mailbox.transports.mmdf import MMDFTransport from django_mailbox.transports.gmail import GmailImapTransport +from django_mailbox.transports.smtp import SMTPTransport diff --git a/django_mailbox/transports/smtp.py b/django_mailbox/transports/smtp.py index c6ed772..fafb642 100644 --- a/django_mailbox/transports/smtp.py +++ b/django_mailbox/transports/smtp.py @@ -6,15 +6,16 @@ from email.mime.text import MIMEText # from django.conf import settings # from django.core.mail import EmailMessage -from django_mailbox.transports.base import EmailTransport, MessageParseError +from django_mailbox.transports.base import EmailTransport class SMTPTransport(EmailTransport): - def __init__(self, - hostname, port=None, ssl=False, tls=False): + def __init__(self, hostname, port=None, + ssl=False, tls=False): self.hostname = hostname self.port = port self.tls = tls + self.server = None if ssl: self.transport = smtplib.SMTP_SSL @@ -30,7 +31,7 @@ class SMTPTransport(EmailTransport): if self.tls: self.server.starttls() - typ, msg = self.server.login(user=username, password=password) + _ = self.server.login(user=username, password=password) # TODO Add abilities for html, image sending. def send_message(self, subject, message, from_email, recipient_list): @@ -46,4 +47,3 @@ class SMTPTransport(EmailTransport): self.server.sendmail(msg['From'], msg['To'], msg.as_string()) self.server.quit() -