def test_get_body_properly_handles_unicode_body(self): with open(os.path.join(os.path.dirname(__file__), "messages/generic_message.eml")) as f: unicode_body = six.u(f.read()) message = Message() message.body = unicode_body expected_body = unicode_body actual_body = message.get_email_object().as_string() self.assertEqual(expected_body, actual_body)
def test_get_text_body_properly_recomposes_line_continuations(self): message = Message() email_object = self._get_email_object( 'message_with_long_text_lines.eml') message.get_email_object = lambda: email_object actual_text = message.text expected_text = ('The one of us with a bike pump is far ahead, ' 'but a man stopped to help us and gave us his pump.') self.assertEqual(actual_text, expected_text)
def test_get_text_body_properly_recomposes_line_continuations(self): message = Message() email_object = self._get_email_object("message_with_long_text_lines.eml") message.get_email_object = lambda: email_object actual_text = message.text expected_text = ( "The one of us with a bike pump is far ahead, " "but a man stopped to help us and gave us his pump." ) self.assertEqual(actual_text, expected_text)
def test_get_body_properly_handles_unicode_body(self): with open( os.path.join(os.path.dirname(__file__), 'messages/generic_message.eml')) as f: unicode_body = six.u(f.read()) message = Message() message.body = unicode_body expected_body = unicode_body actual_body = message.get_email_object().as_string() self.assertEqual(expected_body, actual_body)
def test_message_handles_rehydration_problems(self): incoming_email_object = self._get_email_object( 'message_with_defective_attachment_association.eml', ) expected_email_object = self._get_email_object( 'message_with_defective_attachment_association_result.eml', ) # Note: this is identical to the above, but it appears that # while reading-in an e-mail message, we do alter it slightly message = Message() message.body = incoming_email_object.as_string() msg = self.mailbox.process_incoming_message(incoming_email_object) actual_email_object = msg.get_email_object() self.assertEqual( actual_email_object, expected_email_object, )
def test_receive_conversation_contribution_with_tag_by_mail(self): # create incoming mail with tag (#302) self.client.post( reverse('create-group-conversation', args=(self.group.pk, )), { 'subject': 'Subject', 'text': 'Text' }) reply_to = mail.outbox[0].extra_headers['Reply-To'] msg = Message( from_header=self.gestalt.user.email, body='Delivered-To: {}\n\nText with #tag'.format(reply_to)) message_received.send(self, message=msg)
def test_get_text_body_properly_recomposes_line_continuations(self): message = Message() email_object = self._get_email_object( 'message_with_long_text_lines.eml' ) self.mimic.stub_out_with_mock(message, 'get_email_object') message.get_email_object().and_return(email_object) self.mimic.replay_all() actual_text = message.get_text_body() expected_text = ( u'The one of us with a bike pump is far ahead, ' u'but a man stopped to help us and gave us his pump.' ) self.assertEquals( actual_text, expected_text )
def test_receive_content_contribution_with_tag_by_mail(self): # create incoming mail with tag (#302) self.client.post( reverse('create-group-article', args=(self.group.slug, )), { 'title': 'Test', 'text': 'Test' }) reply_to = mail.outbox[0].extra_headers['Reply-To'] msg = Message( from_header=self.gestalt.user.email, body='Delivered-To: {}\n\nText with #tag'.format(reply_to)) message_received.send(self, message=msg) # check, that tag page contains link to article r = self.client.get(reverse('tag', args=('tag', ))) self.assertContains( r, 'href="{}"'.format( Association.objects.get( content__title='Test').get_absolute_url()))
def _process_message(self, message: RawMessage) -> Message: """ We are overriding this method only to change receiving of message text form by calling str(message.as_bytes(), charset) instead of message.as_string() as original method does. """ from campaigns.utils import convert_header_to_unicode msg = Message() if mailbox_settings['store_original_message']: msg.eml.save('%s.eml' % uuid.uuid4(), ContentFile(message.as_string()), save=False) msg.mailbox = self if 'subject' in message: msg.subject = (convert_header_to_unicode( message['subject'])[0:255]) if 'message-id' in message: msg.message_id = message['message-id'][0:255].strip() if 'from' in message: msg.from_header = convert_header_to_unicode(message['from']) if 'to' in message: msg.to_header = convert_header_to_unicode(message['to']) elif 'Delivered-To' in message: msg.to_header = convert_header_to_unicode(message['Delivered-To']) msg.save() dehydrated_message = self._get_dehydrated_message(message, msg) try: message_context = dehydrated_message.as_string() except KeyError as e: for charset in filter(None, dehydrated_message.get_charsets()): try: message_context = str(dehydrated_message.as_bytes(), charset) break except UnicodeDecodeError: continue else: raise e msg.set_body(message_context) if dehydrated_message['in-reply-to']: msg.in_reply_to = Message.objects.filter( message_id=dehydrated_message['in-reply-to'].strip()).first() msg.save() return msg
def test_message_issue_82_bis(self): """ Ensure that the email object is good before and after calling _get_dehydrated_message() """ message = self._get_email_object('email_issue_82.eml') success = True # this is the code of _process_message() msg = Message() # if STORE_ORIGINAL_MESSAGE: # msg.eml.save('%s.eml' % uuid.uuid4(), ContentFile(message), save=False) msg.mailbox = self.mailbox if 'subject' in message: msg.subject = convert_header_to_unicode(message['subject'])[0:255] if 'message-id' in message: msg.message_id = message['message-id'][0:255] if 'from' in message: msg.from_header = convert_header_to_unicode(message['from']) if 'to' in message: msg.to_header = convert_header_to_unicode(message['to']) elif 'Delivered-To' in message: msg.to_header = convert_header_to_unicode(message['Delivered-To']) msg.save() #here the message is ok str_msg = message.as_string() message = self.mailbox._get_dehydrated_message(message, msg) try: # here as_string raises UnicodeEncodeError str_msg = message.as_string() except: success = False msg.set_body(str_msg) if message['in-reply-to']: try: msg.in_reply_to = Message.objects.filter( message_id=message['in-reply-to'])[0] except IndexError: pass msg.save() self.assertEqual(True, success)
Permits to add reference notes """ lead = models.ForeignKey(Lead, related_name='notes') user = models.ForeignKey(settings.AUTH_USER_MODEL) content = models.TextField(blank=True) created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) objects = AgencyIsolatedManager() def save(self, **kwargs): from fetchmyguest.utils.notifications import notify if not self.agency: self.agency = get_agency() obj = super(Note, self).save(**kwargs) #from fetchmyguest.utils.notifications import notify notify(self.lead, 'Note for lead: {0}'.format(self.lead.customer), alert=True) return obj def __unicode__(self): return self.content[:50] Message.add_to_class('lead', models.ForeignKey(Lead, related_name='messages', null=True, blank=True)) Message.add_to_class('is_lead_source', models.NullBooleanField()) Message.add_to_class('events', DictionaryField(verbose_name="Events log", default={"": ""})) Message.add_to_class('prepare_reply', prepare_reply) Message.add_to_class('get_text_body', get_text_body) # Message.objects = HStoreManager() message_received.connect(check_email_for_lead) webhook_event.connect(handle_mandrill)
def test_message_issue_82_bis(self): """ Ensure that the email object is good before and after calling _get_dehydrated_message() """ message = self._get_email_object('email_issue_82.eml') success = True # this is the code of _process_message() msg = Message() # if STORE_ORIGINAL_MESSAGE: # msg.eml.save('%s.eml' % uuid.uuid4(), ContentFile(message), # save=False) msg.mailbox = self.mailbox if 'subject' in message: msg.subject = convert_header_to_unicode(message['subject'])[0:255] if 'message-id' in message: msg.message_id = message['message-id'][0:255] if 'from' in message: msg.from_header = convert_header_to_unicode(message['from']) if 'to' in message: msg.to_header = convert_header_to_unicode(message['to']) elif 'Delivered-To' in message: msg.to_header = convert_header_to_unicode(message['Delivered-To']) msg.save() # here the message is ok str_msg = message.as_string() message = self.mailbox._get_dehydrated_message(message, msg) try: # here as_string raises UnicodeEncodeError str_msg = message.as_string() except: success = False msg.set_body(str_msg) if message['in-reply-to']: try: msg.in_reply_to = Message.objects.filter( message_id=message['in-reply-to'] )[0] except IndexError: pass msg.save() self.assertEqual(True, success)