Example #1
0
    def test_send_test_issue_with_multiple_images(self):
        body = """<h1>Headline</h1><br />
        {0}
        <img src="{1}" />
        <img src="{2}" />
        """.format(
            self.image1_tag,
            self.image2_url,
            self.image3_url,
        )
        msg = self.send_sample_message(body)
        parsed_payloads = parsed_payloads_from_msg(msg)
        self.assertIn(
            'src="cid:{0}'.format(self.image3_uid),
            safe_unicode(parsed_payloads["text/html"]),
        )
        self.assertIn("Content-ID: <{0}.jpeg>".format(self.image2_uid),
                      safe_unicode(msg))
        self.assertIn("Content-ID: <{0}.jpeg>".format(self.image3_uid),
                      safe_unicode(msg))
        self.assertIn("Content-Type: image/jpeg;", safe_unicode(msg))

        attachments = parsed_attachments_from_msg(msg)
        self.assertIn("{0}.jpeg".format(self.image2_uid), attachments)
        self.assertIn("{0}.jpeg".format(self.image3_uid), attachments)
 def test_send_test_issue_with_image(self):
     body = u'<img src="{0}"/>'.format(self.image.absolute_url_path())
     msg = self.send_sample_message(body)
     parsed_payloads = parsed_payloads_from_msg(msg)
     self.assertIn(u'src="cid:image', safe_unicode(parsed_payloads["text/html"]))
     self.assertIn(u"Content-ID: <image", safe_unicode(msg))
     self.assertIn(u"Content-Type: image/png;", safe_unicode(msg))
    def test_send_test_issue_with_resolveuid_image(self):
        body = '<img src="../../resolveuid/{0}"/>'.format(self.image.UID())

        msg = self.send_sample_message(body)
        parsed_payloads = parsed_payloads_from_msg(msg)
        self.assertNotIn("resolveuid", safe_unicode(parsed_payloads["text/html"]))
        self.assertIn(u'src="cid:image', safe_unicode(parsed_payloads["text/html"]))
        self.assertIn(u"Content-ID: <image", msg)
        self.assertIn(u"Content-Type: image/png;", msg)
Example #4
0
 def test_send_test_issue_with_image(self):
     body = '<img src="{0}"/>'.format(self.image1.absolute_url_path())
     msg = self.send_sample_message(body)
     parsed_payloads = parsed_payloads_from_msg(msg)
     self.assertIn('src="cid:image',
                   safe_unicode(parsed_payloads["text/html"]))
     self.assertIn("Content-ID: <image", safe_unicode(msg))
     # mimetype is not detected by python-emails because of missing file extension,
     # until https://github.com/lavr/python-emails/issues/163 is fixed.
     self.assertIn("Content-Type: application/unknown;", safe_unicode(msg))
Example #5
0
    def test_register_subscriber(self):
        self.assertSequenceEqual(self.mailhost.messages, [])
        self.portal.REQUEST.form.update({
            "newsletter": "/enl1",
            "salutation": "mr",
            "firstname": "Max",
            "name": "Mustermann",
            "subscriber": "*****@*****.**",
        })
        view = getMultiAdapter((self.portal, self.portal.REQUEST),
                               name="register-subscriber")
        view.__call__()
        self.assertEqual(len(self.mailhost.messages), 1)
        self.assertTrue(self.mailhost.messages[0])
        msg = safe_unicode(self.mailhost.messages[0])
        parsed_payloads = parsed_payloads_from_msg(msg)
        self.assertIn("To: [email protected]", msg)
        self.assertIn("From: [email protected]", msg)
        self.assertIn("confirm-subscriber?hkey=",
                      safe_unicode(parsed_payloads["text/plain"]))

        enl_reg_entry = self.enl_reg_tool.values()[0]
        self.assertEqual(
            enl_reg_entry.firstname,
            "Max",
        )
        self.assertTrue(enl_reg_entry.id)
        self.assertEqual(
            enl_reg_entry.lastname,
            "Mustermann",
        )
        self.assertEqual(
            enl_reg_entry.name_prefix,
            "",
        )
        self.assertEqual(
            enl_reg_entry.nl_language,
            "en",
        )
        self.assertEqual(
            enl_reg_entry.organization,
            "",
        )
        self.assertEqual(
            enl_reg_entry.path_to_easynewsletter,
            "enl1",
        )
        self.assertEqual(
            enl_reg_entry.salutation,
            "mr",
        )
        self.assertEqual(
            enl_reg_entry.subscriber,
            "*****@*****.**",
        )
    def test_send_test_issue_with_resolveuid_scale_image(self):
        path = "image/thumb"
        stack = path.split("/")

        # trigger scale generation:
        image_scales_url = "{0}/@@images".format(self.image.absolute_url_path())
        scales = self.portal.restrictedTraverse(image_scales_url)
        scale_view = scales.scale(fieldname=stack[0], scale=stack[1])
        image_scale = scale_view()
        body = u'<img src="{0}"/>'.format(image_scale.absolute_url())
        zt.commit()
        msg = self.send_sample_message(body)
        parsed_payloads = parsed_payloads_from_msg(msg)
        self.assertNotIn(u"resolveuid", safe_unicode(parsed_payloads["text/html"]))
        self.assertIn(u'src="cid:{0}"'.format(image_scale.__name__), safe_unicode(parsed_payloads["text/html"]))
        self.assertIn(u"Content-ID: <{0}>".format(image_scale.__name__), msg)
        self.assertIn(u"Content-Type: image/png;", msg)
    def test_send_test_issue_with_scale_image(self):
        body = '<img src="{0}/@@images/image/thumb"/>'.format(
            self.image.absolute_url_path()
        )

        # trigger scale generation:
        image_scales_url = "{0}/@@images".format(self.image.absolute_url_path())
        scales = self.portal.restrictedTraverse(image_scales_url)
        scale_view = scales.scale(fieldname="image", scale="thumb")
        scale_view()
        # scale_view.index_html()
        zt.commit()

        msg = self.send_sample_message(body)
        parsed_payloads = parsed_payloads_from_msg(msg)
        self.assertIn(u'src="cid:thumb', safe_unicode(parsed_payloads["text/html"]))
        self.assertIn(u"Content-ID: <thumb", safe_unicode(msg))
        self.assertIn(u"Content-Type: image/png;", safe_unicode(msg))
Example #8
0
    def test_send_test_issue_with_scale_image(self):
        body = '<img src="{0}/@@images/image/thumb"/>'.format(
            self.image1.absolute_url_path())
        # trigger scale generation:
        image_scales_url = "{0}/@@images".format(
            self.image1.absolute_url_path())
        scales = self.portal.restrictedTraverse(image_scales_url)
        scale_view = scales.scale(fieldname="image", scale="thumb")
        scale_view()
        # scale_view.index_html()
        zt.commit()

        msg = self.send_sample_message(body)
        parsed_payloads = parsed_payloads_from_msg(msg)
        self.assertIn('src="cid:thumb',
                      safe_unicode(parsed_payloads["text/html"]))
        self.assertIn("Content-ID: <thumb", safe_unicode(msg))
        # mimetype is not detected by python-emails because of missing file extension,
        # until https://github.com/lavr/python-emails/issues/163 is fixed.
        self.assertIn("Content-Type: application/unknown;", safe_unicode(msg))
    def test_issue_send_test(self):
        self.issue = api.content.create(
            type="Newsletter Issue",
            id="issue",
            title=u"Issue 1",
            container=self.newsletter,
        )
        self.issue.title = (
            "This is a very long newsletter issue title with special "
            "characters such as äüö. Will this really work?"
        )
        # self.issue.text = RichTextValue(
        #     raw=u'nothing',
        #     mimeType="text/html",
        #     outputMimeType="text/x-plone-outputfilters-html",
        #     encoding="utf-8",
        # )
        self.issue.output_template = "output_default"
        zt.commit()

        self.portal.REQUEST.form.update(
            {
                "sender_name": self.newsletter.sender_name,
                "sender_email": self.newsletter.sender_email,
                "test_receiver": self.newsletter.test_email,
                "subject": self.issue.title,
                "test": "submit",
            }
        )
        self.portal.REQUEST["REQUEST_METHOD"] = "POST"
        view = getMultiAdapter((self.issue, self.portal.REQUEST), name="send-issue")

        view()
        self.assertEqual(len(self.mailhost.messages), 1)
        self.assertTrue(self.mailhost.messages[0])
        msg = safe_unicode(self.mailhost.messages[0])
        parsed_payloads = parsed_payloads_from_msg(msg)
        self.assertIn(u"Test Member", parsed_payloads['to'])
        self.assertIn(u"<*****@*****.**>", parsed_payloads['to'])
        self.assertIn(u"<*****@*****.**>", parsed_payloads['from'])
        self.assertIn(u"ACME newsletter", parsed_payloads['from'])
Example #10
0
    def test_send_test_issue_with_hashed_scale_image(self):
        # trigger scale generation:
        image_scales_url = "{0}/@@images".format(
            self.image2.absolute_url_path())
        scales = self.portal.restrictedTraverse(image_scales_url)
        scale_view = scales.scale(fieldname="image", scale="thumb")
        scale_view()
        # scale_view.index_html()
        zt.commit()

        # create img tag with hasged image:
        # @@images/71d2fe96-e930-4265-9cd8-e3d4123d75f5.jpeg
        body = '<img src="{0}"/>'.format(scale_view.url)

        msg = self.send_sample_message(body)
        parsed_payloads = parsed_payloads_from_msg(msg)
        self.assertIn('src="cid:{0}'.format(scale_view.url.split("/")[-1]),
                      safe_unicode(parsed_payloads["text/html"]))
        self.assertIn(
            "Content-ID: <{0}>".format(scale_view.url.split("/")[-1]),
            safe_unicode(msg))
        self.assertIn("Content-Type: image/jpeg;", safe_unicode(msg))
Example #11
0
    def test_before_the_personalization_filter(self):
        def _personalize(event):
            edc = event.data["context"]
            event.data["html"] = event.data["html"].replace("PHP", "Python")
            firstname = edc["receiver"].get("firstname")
            lastname = edc["receiver"].get("lastname")
            if not firstname and not lastname:
                edc["SUBSCRIBER_SALUTATION"] = "Dear {0}".format(
                    edc["receiver"]["email"])

        provideHandler(_personalize, [IBeforePersonalizationEvent])
        try:
            # with all infos
            api.content.create(
                type="Newsletter Subscriber",
                container=self.newsletter,
                salutation="ms",
                title="*****@*****.**",
                firstname="Jane",
                lastname="Doe",
                email="*****@*****.**",
            )
            # without firstname and lastname
            api.content.create(
                type="Newsletter Subscriber",
                container=self.newsletter,
                salutation="mr",
                title="*****@*****.**",
                email="*****@*****.**",
            )

            self.issue = api.content.create(
                type="Newsletter Issue",
                id="issue",
                title="Issue 1",
                container=self.newsletter,
            )
            self.issue.title = (
                "This is a very long newsletter issue title with special "
                "characters such as äüö. Will this really work?")
            body = """
                <h1>PHP is cool</h1>
                {{SUBSCRIBER_SALUTATION}}
                """
            self.issue.text = RichTextValue(
                raw=body,
                mimeType="text/html",
                outputMimeType="text/x-plone-outputfilters-html",
                encoding="utf-8",
            )
            self.issue.prologue = self.default_prologue
            self.issue.epilogue = self.default_epilogue
            self.issue.output_template = "output_default"
            self.portal.REQUEST.form.update({
                "sender_name": self.newsletter.sender_name,
                "sender_email": self.newsletter.sender_email,
                "test_receiver": self.newsletter.test_email,
                "subject": self.issue.title,
            })
            self.portal.REQUEST["REQUEST_METHOD"] = "POST"
            zt.commit()
            # clearEvents()  # noqa
            view = getMultiAdapter((self.issue, self.portal.REQUEST),
                                   name="send-issue")
            view()

            # pers_events = getEvents(IBeforePersonalizationFilter)
            # print(pers_events)
            self.assertEqual(len(self.mailhost.messages), 2)
            msg1 = safe_unicode(self.mailhost.messages[0])
            parsed_payloads1 = parsed_payloads_from_msg(msg1)
            self.assertIn("Jane Doe", parsed_payloads1["to"])
            self.assertIn("<*****@*****.**>", parsed_payloads1["to"])
            self.assertIn("Dear Ms. Jane Doe",
                          safe_unicode(parsed_payloads1["text/html"]))

            msg2 = safe_unicode(self.mailhost.messages[1])
            parsed_payloads2 = parsed_payloads_from_msg(msg2)
            self.assertIn("*****@*****.**", parsed_payloads2["to"])
            self.assertIn("Dear [email protected]",
                          safe_unicode(parsed_payloads2["text/html"]))
        finally:
            getGlobalSiteManager().unregisterHandler(
                _personalize, [IBeforePersonalizationEvent])
Example #12
0
    def test_send_test_personalization(self):
        # with all infos
        api.content.create(
            type="Newsletter Subscriber",
            container=self.newsletter,
            salutation="ms",
            title="*****@*****.**",
            firstname="Jane",
            lastname="Doe",
            email="*****@*****.**",
        )
        # without salutation
        api.content.create(
            type="Newsletter Subscriber",
            container=self.newsletter,
            title="*****@*****.**",
            firstname="John",
            lastname="Doe",
            email="*****@*****.**",
        )
        # without firstname
        api.content.create(
            type="Newsletter Subscriber",
            container=self.newsletter,
            title="*****@*****.**",
            lastname="Mustermann",
            email="*****@*****.**",
        )
        # without lastname
        api.content.create(
            type="Newsletter Subscriber",
            container=self.newsletter,
            title="*****@*****.**",
            firstname="Maxima",
            email="*****@*****.**",
        )
        # without firstname and lastname
        api.content.create(
            type="Newsletter Subscriber",
            container=self.newsletter,
            title="*****@*****.**",
            email="*****@*****.**",
        )
        body = "Some body content, in the issue."
        self.issue = api.content.create(
            type="Newsletter Issue",
            id="issue",
            title=("This is a very long newsletter issue title with special "
                   "characters such as äüö. Will this really work?"),
            container=self.newsletter,
            prologue=self.default_prologue,
            epilogue=self.default_epilogue,
            text=RichTextValue(
                raw=body,
                mimeType="text/html",
                outputMimeType="text/x-plone-outputfilters-html",
                encoding="utf-8",
            ),
            output_template="output_default",
        )
        zt.commit()
        self.portal.REQUEST.form.update({
            "sender_name": self.newsletter.sender_name,
            "sender_email": self.newsletter.sender_email,
            "test_receiver": self.newsletter.test_email,
            "subject": self.issue.title,
        })
        self.portal.REQUEST["REQUEST_METHOD"] = "POST"
        view = getMultiAdapter((self.issue, self.portal.REQUEST),
                               name="send-issue")
        view()

        self.assertEqual(len(self.mailhost.messages), 5)
        self.assertTrue(self.mailhost.messages[0])
        self.assertTrue(self.mailhost.messages[1])

        msg1 = safe_unicode(self.mailhost.messages[0])
        parsed_payloads1 = parsed_payloads_from_msg(msg1)
        self.assertIn("Jane Doe", parsed_payloads1["to"])
        self.assertIn("<*****@*****.**>", parsed_payloads1["to"])
        self.assertIn("Dear Ms. Jane Doe",
                      safe_unicode(parsed_payloads1["text/html"]))

        msg2 = safe_unicode(self.mailhost.messages[1])
        parsed_payloads2 = parsed_payloads_from_msg(msg2)
        self.assertIn("John Doe", parsed_payloads2["to"])
        self.assertIn("Dear John Doe",
                      safe_unicode(parsed_payloads2["text/html"]))

        msg3 = safe_unicode(self.mailhost.messages[2])
        parsed_payloads3 = parsed_payloads_from_msg(msg3)
        self.assertIn("Mustermann", parsed_payloads3["to"])
        self.assertIn("<*****@*****.**>", parsed_payloads3["to"])
        self.assertIn("Dear Mustermann",
                      safe_unicode(parsed_payloads3["text/html"]))

        msg4 = safe_unicode(self.mailhost.messages[3])
        parsed_payloads4 = parsed_payloads_from_msg(msg4)
        self.assertIn("Maxima", parsed_payloads4["to"])
        self.assertIn("<*****@*****.**>", parsed_payloads4["to"])
        self.assertIn("Dear Maxima",
                      safe_unicode(parsed_payloads4["text/html"]))

        msg5 = safe_unicode(self.mailhost.messages[4])
        parsed_payloads5 = parsed_payloads_from_msg(msg5)
        self.assertIn("*****@*****.**", parsed_payloads5["to"])
        self.assertIn("Sir or Madam",
                      safe_unicode(parsed_payloads5["text/html"]))