예제 #1
0
    def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
        rcpttos_filtered = [r for r in rcpttos if '@sh8.email' in r.lower()]
        if len(rcpttos_filtered) == 0: return

        # TODO Redesign this logic, and write tests code of exception logic.
        try:
            mail = raw_to_mail(data)
            mails = reproduce_mail(mail, rcpttos_filtered)

            for m in mails:
                m.save()
        except BaseException as e:
            dir_path = os.path.join(settings.BASE_DIR, "log/raw_messages/")
            if not os.path.isdir(dir_path):
                os.makedirs(dir_path)
            file_name = "{}.msg".format(str(uuid.uuid4()))
            file_path = os.path.join(dir_path, file_name)
            with open(file_path, 'w') as f:
                f.write(data)
            logger.exception("""\
{}
Parameter info below.
[peer]
{}
[mailfrom]
{}
[rcpttos]
{}
[data]
{}
[**kwargs]
{}""".format(str(e), peer, mailfrom, rcpttos,
             "'data' is recorded to file located in '{}'".format(file_path),
             kwargs))
            raise
예제 #2
0
    def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
        rcpttos_filtered = [r for r in rcpttos if '@sh8.email' in r.lower()]
        if len(rcpttos_filtered) == 0: return
        
        # TODO Redesign this logic, and write tests code of exception logic.
        try:
            mail = raw_to_mail(data)
            mails = reproduce_mail(mail, rcpttos_filtered)

            for m in mails:
                m.save()
        except BaseException as e:
            dir_path = os.path.join(settings.BASE_DIR, "log/raw_messages/")
            if not os.path.isdir(dir_path):
                os.makedirs(dir_path)
            file_name = "{}.msg".format(str(uuid.uuid4()))
            file_path = os.path.join(dir_path, file_name)
            with open(file_path, 'w') as f:
                f.write(data)
            logger.exception("""\
{}
Parameter info below.
[peer]
{}
[mailfrom]
{}
[rcpttos]
{}
[data]
{}
[**kwargs]
{}""".format(str(e), peer, mailfrom, rcpttos, "'data' is recorded to file located in '{}'".format(file_path), kwargs))
            raise
예제 #3
0
 def test_raw_to_mail__content_disposition_inline(self):
     # given
     rawemail = open('recvmail/fixtures/recvmail/content_disposition_inline.eml').read()
     expected = Mail.objects.get(pk=5)
     # when
     mail = raw_to_mail(rawemail)
     # then
     self.assertEqual(expected.recipient, mail.recipient)
     self.assertEqual(expected.secret_code, mail.secret_code)
     self.assertEqual(expected.sender, mail.sender)
     self.assertEqual(expected.subject, mail.subject)
     self.assertEqualExceptCarriageReturnEndNewLine(expected.contents, mail.contents)
예제 #4
0
    def test_raw_to_mail__unicode_sender(self):
        # given
        rawemail = open('recvmail/fixtures/recvmail/unicode_sender.eml').read()
        expected = Mail.objects.get(pk=4)

        # when
        mail = raw_to_mail(rawemail)

        # then
        self.assertEqual(expected.recipient, mail.recipient)
        self.assertEqual(expected.sender, mail.sender)
        self.assertEqual(expected.subject, mail.subject)
        self.assertEqualExceptCarriageReturnEndNewLine(expected.contents, mail.contents)
예제 #5
0
    def test_raw_to_mail__secretcode(self):
        # given
        rawemail = open('recvmail/fixtures/recvmail/secret.eml').read()
        expected = Mail.objects.get(pk=6)
        # when
        mail = raw_to_mail(rawemail)

        # then
        self.assertEqual(expected.recipient, mail.recipient)
        self.assertEqual(expected.secret_code, mail.secret_code)
        self.assertEqual(expected.sender, mail.sender)
        self.assertEqual(expected.subject, mail.subject)
        self.assertEqualExceptCarriageReturnEndNewLine(expected.contents,
                                                       mail.contents)
예제 #6
0
    def test_raw_to_mail__without_content_type_header(self):
        """This is a test case of '#20 Exception occurred when the 'Content-Type' header not exists.'."""

        # given
        rawemail = open('recvmail/fixtures/recvmail/no_content_type_header.eml').read()
        expected = Mail.objects.get(pk=5)
        # when
        mail = raw_to_mail(rawemail)

        # then
        self.assertEqual(expected.recipient, mail.recipient)
        self.assertEqual(expected.secret_code, mail.secret_code)
        self.assertEqual(expected.sender, mail.sender)
        self.assertEqual(expected.subject, mail.subject)
        self.assertEqualExceptCarriageReturnEndNewLine(expected.contents, mail.contents)
예제 #7
0
    def test_raw_to_mail__euckr_plain(self):
        self.maxDiff = None

        # given
        rawemail = open('recvmail/fixtures/recvmail/iphone_mail_euckr_plain.eml').read()
        expected = Mail.objects.get(pk=3)

        # when
        mail = raw_to_mail(rawemail)

        # then
        self.assertEqual(expected.recipient, mail.recipient)
        self.assertEqual(expected.sender, mail.sender)
        self.assertEqual(expected.subject, mail.subject)
        self.assertEqualExceptCarriageReturnEndNewLine(expected.contents, mail.contents)
예제 #8
0
    def test_raw_to_mail__euckr_html(self):
        self.maxDiff = None

        # given
        rawemail = open('recvmail/fixtures/recvmail/iphone_mail_euckr_html.eml').read()
        expected = Mail.objects.get(pk=2)

        # when
        mail = raw_to_mail(rawemail)

        # then
        self.assertEqual(expected.recipient, mail.recipient)
        self.assertEqual(expected.sender, mail.sender)
        self.assertEqual(expected.subject, mail.subject)
        self.assertHTMLEqual(expected.contents, mail.contents)
예제 #9
0
    def test_raw_to_mail(self):
        self.maxDiff = None

        # given
        rawemail = open('recvmail/fixtures/recvmail/aws_quoted_multipart_html_plain.eml').read()
        expected = Mail.objects.get(pk=1)

        # when
        mail = raw_to_mail(rawemail)

        # then
        self.assertEqual(expected.recipient, mail.recipient)
        self.assertEqual(expected.sender, mail.sender)
        self.assertEqual(expected.subject, mail.subject)
        self.assertHTMLEqual(expected.contents, mail.contents)
예제 #10
0
    def test_raw_to_mail__euckr_html(self):
        self.maxDiff = None

        # given
        rawemail = open(
            'recvmail/fixtures/recvmail/iphone_mail_euckr_html.eml').read()
        expected = Mail.objects.get(pk=2)

        # when
        mail = raw_to_mail(rawemail)

        # then
        self.assertEqual(expected.recipient, mail.recipient)
        self.assertEqual(expected.sender, mail.sender)
        self.assertEqual(expected.subject, mail.subject)
        self.assertHTMLEqual(expected.contents, mail.contents)
예제 #11
0
    def test_raw_to_mail__without_content_type_header(self):
        """This is a test case of '#20 Exception occurred when the 'Content-Type' header not exists.'."""

        # given
        rawemail = open(
            'recvmail/fixtures/recvmail/no_content_type_header.eml').read()
        expected = Mail.objects.get(pk=5)
        # when
        mail = raw_to_mail(rawemail)

        # then
        self.assertEqual(expected.recipient, mail.recipient)
        self.assertEqual(expected.secret_code, mail.secret_code)
        self.assertEqual(expected.sender, mail.sender)
        self.assertEqual(expected.subject, mail.subject)
        self.assertEqualExceptCarriageReturnEndNewLine(expected.contents,
                                                       mail.contents)
예제 #12
0
    def test_raw_to_mail__euckr_plain(self):
        self.maxDiff = None

        # given
        rawemail = open(
            'recvmail/fixtures/recvmail/iphone_mail_euckr_plain.eml').read()
        expected = Mail.objects.get(pk=3)

        # when
        mail = raw_to_mail(rawemail)

        # then
        self.assertEqual(expected.recipient, mail.recipient)
        self.assertEqual(expected.sender, mail.sender)
        self.assertEqual(expected.subject, mail.subject)
        self.assertEqualExceptCarriageReturnEndNewLine(expected.contents,
                                                       mail.contents)
예제 #13
0
    def test_raw_to_mail(self):
        self.maxDiff = None

        # given
        rawemail = open(
            'recvmail/fixtures/recvmail/aws_quoted_multipart_html_plain.eml'
        ).read()
        expected = Mail.objects.get(pk=1)

        # when
        mail = raw_to_mail(rawemail)

        # then
        self.assertEqual(expected.recipient, mail.recipient)
        self.assertEqual(expected.sender, mail.sender)
        self.assertEqual(expected.subject, mail.subject)
        self.assertHTMLEqual(expected.contents, mail.contents)