def test_MakeMessage_with_binary_attachment(self): """Message should still encode as ascii with non-ascii attachments.""" ctrl = MailController('*****@*****.**', '*****@*****.**', 'subject', u'Body') ctrl.addAttachment('\x00\xffattach') message = ctrl.makeMessage() self.assertTrue(is_ascii_only(message.as_string()), "Non-ascii message string.")
def test_MakeMessage_with_binary_attachment(self): """Message should still encode as ascii with non-ascii attachments.""" ctrl = MailController( '*****@*****.**', '*****@*****.**', 'subject', u'Body') ctrl.addAttachment('\x00\xffattach') message = ctrl.makeMessage() self.assertTrue( is_ascii_only(message.as_string()), "Non-ascii message string.")
def test_MakeMessage_with_non_binary_attachment(self): """Simple ascii attachments should not be encoded.""" ctrl = MailController('*****@*****.**', '*****@*****.**', 'subject', u'Body') ctrl.addAttachment('Hello, I am ascii') message = ctrl.makeMessage() body, attachment = message.get_payload() self.assertEqual(attachment.get_payload(), attachment.get_payload(decode=True))
def test_MakeMessage_with_non_binary_attachment(self): """Simple ascii attachments should not be encoded.""" ctrl = MailController( '*****@*****.**', '*****@*****.**', 'subject', u'Body') ctrl.addAttachment('Hello, I am ascii') message = ctrl.makeMessage() body, attachment = message.get_payload() self.assertEqual( attachment.get_payload(), attachment.get_payload(decode=True))
def test_MakeMessage_no_attachment(self): """A message without an attachment should have a single body.""" ctrl = MailController( '*****@*****.**', '*****@*****.**', 'subject', 'body') message = ctrl.makeMessage() self.assertEqual('*****@*****.**', message['From']) self.assertEqual('*****@*****.**', message['To']) self.assertEqual('subject', message['Subject']) self.assertEqual('body', message.get_payload(decode=True))
def test_MakeMessage_no_attachment(self): """A message without an attachment should have a single body.""" ctrl = MailController('*****@*****.**', '*****@*****.**', 'subject', 'body') message = ctrl.makeMessage() self.assertEqual('*****@*****.**', message['From']) self.assertEqual('*****@*****.**', message['To']) self.assertEqual('subject', message['Subject']) self.assertEqual('body', message.get_payload(decode=True))
def test_MakeMessageSpecialChars(self): """A message should have its to and from addrs converted to ascii.""" to_addr = u'\[email protected]' from_addr = u'\[email protected]' ctrl = MailController(from_addr, to_addr, 'subject', 'body') message = ctrl.makeMessage() self.assertEqual('=?utf-8?b?4YSAZnJvbUBleGFtcGxlLmNvbQ==?=', message['From']) self.assertEqual('=?utf-8?b?4YSAdG9AZXhhbXBsZS5jb20=?=', message['To']) self.assertEqual('subject', message['Subject']) self.assertEqual('body', message.get_payload(decode=True))
def test_MakeMessage_unicode_body(self): # A message without an attachment with a unicode body gets sent as # UTF-8 encoded MIME text, and the message as a whole can be flattened # to a string with Unicode errors. ctrl = MailController('*****@*****.**', '*****@*****.**', 'subject', u'Bj\xf6rn') message = ctrl.makeMessage() # Make sure that the message can be flattened to a string as sendmail # does without raising a UnicodeEncodeError. message.as_string() self.assertEqual('Bj\xc3\xb6rn', message.get_payload(decode=True))
def test_MakeMessage_unicode_body(self): # A message without an attachment with a unicode body gets sent as # UTF-8 encoded MIME text, and the message as a whole can be flattened # to a string with Unicode errors. ctrl = MailController( '*****@*****.**', '*****@*****.**', 'subject', u'Bj\xf6rn') message = ctrl.makeMessage() # Make sure that the message can be flattened to a string as sendmail # does without raising a UnicodeEncodeError. message.as_string() self.assertEqual('Bj\xc3\xb6rn', message.get_payload(decode=True))
def test_MakeMessageSpecialChars(self): """A message should have its to and from addrs converted to ascii.""" to_addr = u'\[email protected]' from_addr = u'\[email protected]' ctrl = MailController(from_addr, to_addr, 'subject', 'body') message = ctrl.makeMessage() self.assertEqual('=?utf-8?b?4YSAZnJvbUBleGFtcGxlLmNvbQ==?=', message['From']) self.assertEqual('=?utf-8?b?4YSAdG9AZXhhbXBsZS5jb20=?=', message['To']) self.assertEqual('subject', message['Subject']) self.assertEqual('body', message.get_payload(decode=True))
def test_MakeMessage_long_address(self): # Long email addresses are not wrapped if very long. These are due to # the paranoid checks that are in place to make sure that there are no # carriage returns in the to or from email addresses. to_addr = ('Launchpad Community Help Rotation team ' '<*****@*****.**>') from_addr = ('Some Random User With Many Public Names ' '<*****@*****.**') ctrl = MailController(from_addr, to_addr, 'subject', 'body') message = ctrl.makeMessage() self.assertEqual(from_addr, message['From']) self.assertEqual(to_addr, message['To'])
def test_MakeMessage_with_specific_attachment(self): """Explicit attachment params should be obeyed.""" ctrl = MailController( '*****@*****.**', '*****@*****.**', 'subject', 'body') ctrl.addAttachment( 'attach', 'text/plain', inline=True, filename='README') message = ctrl.makeMessage() attachment = message.get_payload()[1] self.assertEqual('attach', attachment.get_payload(decode=True)) self.assertEqual( 'text/plain', attachment['Content-Type']) self.assertEqual( 'inline; filename="README"', attachment['Content-Disposition'])
def test_MakeMessage_with_specific_attachment(self): """Explicit attachment params should be obeyed.""" ctrl = MailController('*****@*****.**', '*****@*****.**', 'subject', 'body') ctrl.addAttachment('attach', 'text/plain', inline=True, filename='README') message = ctrl.makeMessage() attachment = message.get_payload()[1] self.assertEqual('attach', attachment.get_payload(decode=True)) self.assertEqual('text/plain', attachment['Content-Type']) self.assertEqual('inline; filename="README"', attachment['Content-Disposition'])
def test_MakeMessage_long_address(self): # Long email addresses are not wrapped if very long. These are due to # the paranoid checks that are in place to make sure that there are no # carriage returns in the to or from email addresses. to_addr = ( 'Launchpad Community Help Rotation team ' '<*****@*****.**>') from_addr = ( 'Some Random User With Many Public Names ' '<*****@*****.**') ctrl = MailController(from_addr, to_addr, 'subject', 'body') message = ctrl.makeMessage() self.assertEqual(from_addr, message['From']) self.assertEqual(to_addr, message['To'])
def test_MakeMessage_with_attachment(self): """A message with an attachment should be multipart.""" ctrl = MailController('*****@*****.**', '*****@*****.**', 'subject', 'body') ctrl.addAttachment('attach') message = ctrl.makeMessage() self.assertEqual('*****@*****.**', message['From']) self.assertEqual('*****@*****.**', message['To']) self.assertEqual('subject', message['Subject']) body, attachment = message.get_payload() self.assertEqual('body', body.get_payload(decode=True)) self.assertEqual('attach', attachment.get_payload(decode=True)) self.assertEqual('application/octet-stream', attachment['Content-Type']) self.assertEqual('attachment', attachment['Content-Disposition'])
def test_MakeMessage_with_attachment(self): """A message with an attachment should be multipart.""" ctrl = MailController( '*****@*****.**', '*****@*****.**', 'subject', 'body') ctrl.addAttachment('attach') message = ctrl.makeMessage() self.assertEqual('*****@*****.**', message['From']) self.assertEqual('*****@*****.**', message['To']) self.assertEqual('subject', message['Subject']) body, attachment = message.get_payload() self.assertEqual('body', body.get_payload(decode=True)) self.assertEqual('attach', attachment.get_payload(decode=True)) self.assertEqual( 'application/octet-stream', attachment['Content-Type']) self.assertEqual('attachment', attachment['Content-Disposition'])
def create_mail_for_directoryMailBox(from_addr, to_addrs, subject, body, headers=None): """Create a email in the DirectoryMailBox.""" mc = MailController(from_addr, to_addrs, subject, body, headers) message = mc.makeMessage() if 'message-id' not in message: message['Message-Id'] = get_msgid() if 'date' not in message: message['Date'] = formatdate() # Since this is faking incoming email, set the X-Original-To. message['X-Original-To'] = to_addrs mailbox = getUtility(IMailBox) msg_file = open( os.path.join(mailbox.mail_dir, message['Message-Id']), 'w') msg_file.write(message.as_string()) msg_file.close()
def create_mail_for_directoryMailBox(from_addr, to_addrs, subject, body, headers=None): """Create a email in the DirectoryMailBox.""" mc = MailController(from_addr, to_addrs, subject, body, headers) message = mc.makeMessage() if 'message-id' not in message: message['Message-Id'] = get_msgid() if 'date' not in message: message['Date'] = formatdate() # Since this is faking incoming email, set the X-Original-To. message['X-Original-To'] = to_addrs mailbox = getUtility(IMailBox) msg_file = open(os.path.join(mailbox.mail_dir, message['Message-Id']), 'w') msg_file.write(message.as_string()) msg_file.close()