From 9bc97119e37f25e9329d96ae3c259ddf14d2ea22 Mon Sep 17 00:00:00 2001 From: Jabrail Lezgintsev Date: Wed, 23 May 2018 16:49:26 +0300 Subject: [PATCH] Added tests, refactoring --- .../management/commands/sendmail.py | 13 +++++----- django_mailbox/tests/test_transports.py | 24 ++++++++++++++++++- django_mailbox/transports/smtp.py | 22 +++++++++-------- 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/django_mailbox/management/commands/sendmail.py b/django_mailbox/management/commands/sendmail.py index f78bb07..87fdf57 100644 --- a/django_mailbox/management/commands/sendmail.py +++ b/django_mailbox/management/commands/sendmail.py @@ -7,13 +7,12 @@ class Command(BaseCommand): help = 'Sends an e-mail to specified recipient' def add_arguments(self, parser): - parser.add_argument('from', type=int, help='ID (pk) for the mailbox you want to use to send an e-mail') - parser.add_argument('to', help='E-mail address of recipient') - parser.add_argument('subject', help='Subject of letter') - parser.add_argument('body', help='Message') + parser.add_argument('from', type=int, help='ID (pk) for the mailbox you want to use to send an e-mail') + parser.add_argument('to', type=str, help='E-mail address of recipient') + parser.add_argument('subject', type=str, help='Subject of letter') + parser.add_argument('body', type=str, help='Message') def handle(self, *args, **options): - from_email = options.get('from') to = options.get('to') subject = options.get('subject') @@ -22,6 +21,6 @@ class Command(BaseCommand): mailbox = Mailbox.objects.get(pk=from_email) self.stdout.write(self.style.WARNING("-"*36 + "\nFrom: %s \nTo: %s \nSubject: %s \nMessage: %s \n" % (mailbox.from_email, - to, subject, body) + '-'*36)) - if mailbox.send_mail(options.get('subject'), options.get('to'), options.get('body')): + to, subject, body) + '-'*36)) + if mailbox.send_mail(subject, to, body): self.stdout.write(self.style.SUCCESS('The letter is sent.')) diff --git a/django_mailbox/tests/test_transports.py b/django_mailbox/tests/test_transports.py index 1d3c68f..a679bd6 100644 --- a/django_mailbox/tests/test_transports.py +++ b/django_mailbox/tests/test_transports.py @@ -4,7 +4,7 @@ import six from django.test.utils import override_settings from django_mailbox.tests.base import EmailMessageTestCase, get_email_as_text -from django_mailbox.transports import ImapTransport, Pop3Transport +from django_mailbox.transports import ImapTransport, Pop3Transport, SMTPTransport FAKE_UID_SEARCH_ANSWER = ( 'OK', @@ -168,3 +168,25 @@ class TestPop3Transport(EmailMessageTestCase): expected_message = self._get_email_object('generic_message.eml') self.assertEqual(expected_message, actual_message) + + +class TestSMTPTransport(EmailMessageTestCase): + class TestSMTPTransport(EmailMessageTestCase): + def setUp(self): + self.arbitrary_hostname = '' + self.arbitrary_port = 465 + self.ssl = True + self.transport = SMTPTransport( + self.arbitrary_hostname, + self.arbitrary_port, + self.ssl + ) + + def test_sending_messages(self): + with mock.patch('SMTPTransport') as mock_smtp: + from_address = 'from@domain.com' + to_address = 'to@domain.com' + + smtp = mock_smtp('smtp.domain.com') + + smtp.send_message(from_address, [to_address], 'subject', 'message') diff --git a/django_mailbox/transports/smtp.py b/django_mailbox/transports/smtp.py index fafb642..8a80225 100644 --- a/django_mailbox/transports/smtp.py +++ b/django_mailbox/transports/smtp.py @@ -1,10 +1,8 @@ -import smtplib +from smtplib import SMTP, SMTP_SSL from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText - -# from django.conf import settings -# from django.core.mail import EmailMessage +from email.mime.image import MIMEImage from django_mailbox.transports.base import EmailTransport @@ -18,11 +16,11 @@ class SMTPTransport(EmailTransport): self.server = None if ssl: - self.transport = smtplib.SMTP_SSL + self.transport = SMTP_SSL if not self.port: self.port = 465 else: - self.transport = smtplib.SMTP + self.transport = SMTP if not self.port: self.port = 25 @@ -33,11 +31,15 @@ class SMTPTransport(EmailTransport): _ = self.server.login(user=username, password=password) - # TODO Add abilities for html, image sending. - def send_message(self, subject, message, from_email, recipient_list): - msg = MIMEMultipart(message) + def send_message(self, subject, message, from_email, recipient_list, img=None, html=False): + msg = MIMEMultipart() - msg_text = MIMEText(message, 'plain') + msg_text = MIMEText(message, 'plain' if not html else 'html') + + if img: + with open(img, 'rb') as fp: + msg_img = MIMEImage(fp.read()) + msg.attach(msg_img) msg.attach(msg_text)