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)
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))
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))
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'])
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))
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])
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"]))