def test_default_from(self): email = EmailMessage('Subject', 'Content', to=['*****@*****.**']) message = email.message() assert message['Subject'].encode() == 'Subject' assert message.get_payload() == 'Content' assert message['From'] == 'root@localhost' assert message['To'] == '*****@*****.**'
def test_nofrom(self): settings.emails.from_default = '' email = EmailMessage('Subject', 'Content', to=['*****@*****.**']) try: email.message() self.fail('expected SettingsError since from was not set') except SettingsError as e: assert 'email must have a from address' in str(e)
def test_normal_ascii(self): """Test normal ascii character case""" email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**']) message = email.message() assert message['Subject'].encode() == 'Subject' assert message.get_payload() == 'Content' assert message['From'] == '*****@*****.**' assert message['To'] == '*****@*****.**' assert email.recipients() == ['*****@*****.**']
def test_multi_recip(self): email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**', '*****@*****.**']) message = email.message() assert message['Subject'].encode() == 'Subject' assert message.get_payload() == 'Content' assert message['From'] == '*****@*****.**' assert message['To'] == '[email protected], [email protected]' assert email.recipients() == ['*****@*****.**', '*****@*****.**']
def test_bcc(self): email = EmailMessage('Subject', 'Content', to=['*****@*****.**'], bcc=['*****@*****.**', '*****@*****.**']) message = email.message() assert message['Subject'].encode() == 'Subject' assert message.get_payload() == 'Content' assert message['From'] == 'root@localhost' assert message['To'] == '*****@*****.**' assert email.recipients() == ['*****@*****.**', '*****@*****.**', '*****@*****.**']
def test_reply_to_default(self): settings.emails.reply_to = '*****@*****.**' email = EmailMessage('Subject', 'Content', to=['*****@*****.**']) message = email.message() assert message['Subject'].encode() == 'Subject' assert message.get_payload() == 'Content' assert message['From'] == 'root@localhost' assert message['To'] == '*****@*****.**' assert message['Reply-To'] == '*****@*****.**'
def test_extra_header(self): email = EmailMessage('Subject', 'Content', to=['*****@*****.**'], headers={'Reply-To': '*****@*****.**'}) message = email.message() assert message['Subject'].encode() == 'Subject' assert message.get_payload() == 'Content' assert message['From'] == 'root@localhost' assert message['To'] == '*****@*****.**' assert message['Reply-To'] == '*****@*****.**'
def test_header_inj_from(self): email = EmailMessage('From Injection Test', 'Content', '[email protected]\nto:[email protected]', ['*****@*****.**']) try: email.message() except BadHeaderError as e: assert 'Header values can\'t contain newlines' in str(e) else: self.fail("header injection allowed in from")
def test_long_subj(self): # Test for space continuation character in long (ascii) subject headers (#7747) expected = 'Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\n' \ 'Content-Transfer-Encoding: quoted-printable\nSubject: Long subject lines ' \ 'that get wrapped should use a space continuation\n character to get ' \ 'expected behaviour in Outlook and Thunderbird\nFrom: [email protected]' \ '\nTo: [email protected]' email = EmailMessage('Long subject lines that get wrapped should use a space ' 'continuation character to get expected behaviour in Outlook ' 'and Thunderbird', 'Content', '*****@*****.**', ['*****@*****.**']) message = email.message() assert message.as_string().startswith(expected), message.as_string()
def test_html_overrides(self): """Test overrides with html content""" settings.emails.override = '*****@*****.**' body = '<p>This is an <strong>important</strong> message.</p>' email = EmailMessage('Subject', body, '*****@*****.**', ['*****@*****.**'], cc=['*****@*****.**'], bcc=['*****@*****.**']) email.content_subtype = "html" # Main content is now text/html message = email.message() msg_body = '<hr />\n\n<p>To: [email protected] <br />\nCc: [email protected] <br />\n' \ 'Bcc: [email protected]</p>\n\n<hr />\n<p>This is an <strong>important</strong> ' \ 'message.</p>' assert msg_body in message.as_string() assert 'text/html;' in message['Content-Type']
def test_overrides(self, mm_tracker=None): """Test overrides""" settings.emails.override = '*****@*****.**' email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**'], cc=['*****@*****.**'], bcc=['*****@*****.**']) message = email.message() assert message['Subject'].encode() == 'Subject' assert message['From'] == '*****@*****.**' assert message['To'] == '*****@*****.**' assert message['Cc'] is None assert email.recipients() == ['*****@*****.**'] msg_string = message.as_string() assert '-' * 70 in msg_string assert '\n\nTo: [email protected]' in msg_string assert '\nCc: [email protected]' in msg_string assert '\nBcc: [email protected]' in msg_string assert '\nContent' in msg_string
def test_duplicate_headers(self): # Specifying dates or message-ids in the extra headers overrides the default # values (#9233). headers = {"date": "Fri, 09 Nov 2001 01:08:47 -0000", "Message-ID": "foo"} email = EmailMessage('subject', 'content', '*****@*****.**', ['*****@*****.**'], headers=headers) print(email.message().as_string()) msg_str = email.message().as_string() # testing with asserts because the ordering of date and Message-ID headers is # not guaranteed assert 'Content-Type: text/plain; charset="utf-8"' in msg_str assert 'MIME-Version: 1.0' in msg_str assert 'Content-Transfer-Encoding: quoted-printable' in msg_str assert 'Subject: subject' in msg_str assert 'From: [email protected]' in msg_str assert 'To: [email protected]' in msg_str assert 'date: Fri, 09 Nov 2001 01:08:47 -0000' in msg_str assert 'Message-ID: foo' in msg_str assert '\n\ncontent' in msg_str
def test_overrides_recipients_first(self): """ Test overrides, but call recipients first just like the code does when sending an email """ settings.emails.override = '*****@*****.**' email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**'], cc=['*****@*****.**'], bcc=['*****@*****.**']) assert email.recipients() == ['*****@*****.**'] message = email.message() assert message['Subject'].encode() == 'Subject' assert message['From'] == '*****@*****.**' assert message['To'] == '*****@*****.**' assert message['Cc'] is None msg_string = message.as_string() assert '-' * 70 in msg_string assert '\n\nTo: [email protected]' in msg_string assert '\nCc: [email protected]' in msg_string assert '\nBcc: [email protected]' in msg_string assert '\nContent' in msg_string
def test_html_override_with_full_document(self): html_doc = r"""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Minimal XHTML 1.0 Document with W3C DTD</title> </head> <body> <p>This is a minimal <a href="http://www.w3.org/TR/xhtml1/">XHTML 1.0</a> document with a W3C url for the DTD.</p> </body> </html>""" settings.emails.override = '*****@*****.**' email = EmailMessage('Subject', html_doc, '*****@*****.**', ['*****@*****.**'], cc=['*****@*****.**'], bcc=['*****@*****.**']) email.content_subtype = "html" # Main content is now text/html message = email.message() msg_body = '<body><hr />\n\n<p>To: [email protected] <br />\nCc: [email protected] <br />\n' \ 'Bcc: [email protected]</p>\n\n<hr />\n\n <p>This is a minimal ' assert msg_body in message.as_string() assert 'text/html;' in message['Content-Type']
def test_cc_defaults(self): settings.emails.cc_defaults = ['*****@*****.**', '*****@*****.**'] email = EmailMessage('Subject', 'Content', to=['*****@*****.**']) message = email.message() assert message['Subject'].encode() == 'Subject' assert message.get_payload() == 'Content' assert message['From'] == 'root@localhost' assert message['To'] == '*****@*****.**' assert message['Cc'] == '[email protected], [email protected]' assert email.recipients() == ['*****@*****.**', '*****@*****.**', '*****@*****.**'] email = EmailMessage('Subject', 'Content', to=['*****@*****.**'], cc=['*****@*****.**']) message = email.message() assert message['Subject'].encode() == 'Subject' assert message.get_payload() == 'Content' assert message['From'] == 'root@localhost' assert message['To'] == '*****@*****.**' assert message['Cc'] == '*****@*****.**' assert email.recipients() == ['*****@*****.**', '*****@*****.**']
def send_new_user_email(user_obj): subject = '%s - User Login Information' % (settings.name.full) body = getcontent('auth:new_user_email.txt', user_obj=user_obj).primary email = EmailMessage(subject, body, None, [user_obj.email_address]) return send_email_or_log_error(email)
def send_reset_password_email(user_obj): subject = '%s - User Password Reset' % (settings.name.full) body = getcontent('auth:password_reset_email.txt', user_obj=user_obj).primary email = EmailMessage(subject, body, None, [user_obj.email_address]) return send_email_or_log_error(email)