def setUp(self): self.portal = self.layer["portal"] self.portal_url = self.portal.portal_url() # create EasyNewsletter instance and add some subscribers setRoles(self.portal, TEST_USER_ID, ["Manager"]) self.portal.portal_workflow.setDefaultChain( "simple_publication_workflow", ) login(self.portal, TEST_USER_NAME) self.portal.invokeFactory("Newsletter", "enl1", title="ENL 1") self.newsletter = self.portal.get("enl1") self.newsletter.senderEmail = "*****@*****.**" self.newsletter.senderName = "ACME newsletter" self.newsletter.testEmail = "*****@*****.**" self.mail_settings = get_portal_mail_settings() # Set up a mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost("MailHost") self.portal.MailHost.smtp_host = "localhost" registry = getUtility(IRegistry) self.mail_settings = registry.forInterface(IMailSchema, prefix="plone") self.mail_settings.email_from_address = "*****@*****.**" self.mail_settings.smtp_host = "localhost" sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # We need to fake a valid mail setup self.mailhost = self.portal.MailHost self.enl_reg_tool = getUtility(IENLRegistrationTool, "enl_registration_tool")
def send_unsubscribe_email(self, subscriber): newsletter = self.context catalog = getToolByName(self.context, "portal_catalog") query = {} query["portal_type"] = "ENLSubscriber" query["email"] = subscriber results = catalog.unrestrictedSearchResults(query) messages = IStatusMessage(self.request) if results: subscriber_brain = results[0] unsubscribe_url = self.newsletter_url +\ '/unsubscribe?subscriber=' + subscriber_brain.UID msg_text = """%s: %s""" % ( newsletter.getUnsubscribe_string(), unsubscribe_url) settings = get_portal_mail_settings() api.portal.send_email( recipient=subscriber, sender=settings.email_from_address, subject=_(u"confirm newsletter unsubscription"), body=msg_text, ) messages.addStatusMessage( _("We send you an email, please confirm this unsubscription."), "info") else: # todo: write an extra error msg if a plone user wants to # unsubscribe himself messages.addStatusMessage( _("Your email address could not be found in subscribers."), "error")
def setUp(self): self.portal = self.layer["portal"] self.catalog = getToolByName(self.portal, "portal_catalog") setRoles(self.portal, TEST_USER_ID, ["Manager"]) # creating test objects: folder, news, newsletter and subscriber self.portal.invokeFactory("Folder", "testfolder") self.folder = self.portal["testfolder"] self.folder.invokeFactory("News Item", "news01") self.folder.invokeFactory("EasyNewsletter", "daily-news") self.newsletter = self.folder["daily-news"] self.newsletter.setTitle("Daily News") criteria = self.newsletter.addCriterion("portal_type", "ATSimpleStringCriterion") criteria.setValue("News Item") self.newsletter.invokeFactory("ENLSubscriber", "subscriber01") self.view = getMultiAdapter((self.newsletter, self.layer["request"]), name="daily-issue") self.mail_settings = get_portal_mail_settings() self.mail_settings.email_from_address = "*****@*****.**" # setting a Mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost("MailHost") sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost)
def setUp(self): self.portal = self.layer["portal"] self.portal_url = self.portal.absolute_url() self.browser = Browser(self.portal) self.browser.handleErrors = False self.mail_settings = get_portal_mail_settings() self.mail_settings.email_from_address = "*****@*****.**" # Set up a mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost("MailHost") self.portal.MailHost.smtp_host = "localhost" self.portal.MailHost.email_from_address = "*****@*****.**" sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # We need to fake a valid mail setup # create EasyNewsletter instance and add some subscribers setRoles(self.portal, TEST_USER_ID, ["Manager"]) # self.portal.portal_workflow.setDefaultChain( # "simple_publication_workflow", # ) self.portal.invokeFactory("Newsletter", "enl1", title="ENL 1") self.newsletter = self.portal.get("enl1") self.newsletter.senderEmail = "*****@*****.**" self.newsletter.senderName = "ACME newsletter" self.newsletter.testEmail = "*****@*****.**" # Commit so that the test browser sees these changes import transaction as zt zt.commit()
def setUp(self): self.mail_settings = get_portal_mail_settings() self.portal = self.layer['portal'] setRoles(self.portal, TEST_USER_ID, ['Manager']) login(self.portal, TEST_USER_NAME) self.portal.invokeFactory('Folder', 'test-folder') self.folder = self.portal['test-folder'] self.portal = self.layer['portal'] self.folder.invokeFactory("EasyNewsletter", "newsletter") self.newsletter = self.folder.newsletter self.newsletter.senderEmail = "*****@*****.**" self.newsletter.senderName = "ACME newsletter" self.newsletter.testEmail = "*****@*****.**" # Set up a mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost('MailHost') sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # We need to fake a valid mail setup # self.mail_settings.email_from_address = u'*****@*****.**' self.mailhost = self.portal.MailHost # image for image testing self.folder.invokeFactory("Image", "image") self.image = self.folder.image image = self.folder['image'] image.title = 'My Image' image.description = 'This is my image.' image.image = dummy_image(image) self.image = image
def send_unsubscribe_email(self, subscriber): newsletter = self.context catalog = getToolByName(self.context, "portal_catalog") query = {} query["portal_type"] = "ENLSubscriber" query["email"] = subscriber results = catalog.unrestrictedSearchResults(query) messages = IStatusMessage(self.request) if results: subscriber_brain = results[0] unsubscribe_url = self.newsletter_url +\ '/unsubscribe?subscriber=' + subscriber_brain.UID msg_text = """%s: %s""" % (newsletter.getUnsubscribe_string(), unsubscribe_url) settings = get_portal_mail_settings() api.portal.send_email( recipient=subscriber, sender=settings.email_from_address, subject=_(u"confirm newsletter unsubscription"), body=msg_text, ) messages.addStatusMessage( _("We send you an email, please confirm this unsubscription."), "info") else: # todo: write an extra error msg if a plone user wants to # unsubscribe himself messages.addStatusMessage( _("Your email address could not be found in subscribers."), "error")
def setUp(self): self.portal = self.layer['portal'] self.portal_url = self.portal.portal_url() # create EasyNewsletter instance and add some subscribers setRoles(self.portal, TEST_USER_ID, ['Manager']) login(self.portal, TEST_USER_NAME) self.portal.invokeFactory('EasyNewsletter', 'enl1', title=u"ENL 1") self.newsletter = self.portal.get('enl1') self.newsletter.senderEmail = "*****@*****.**" self.newsletter.senderName = "ACME newsletter" self.newsletter.testEmail = "*****@*****.**" self.mail_settings = get_portal_mail_settings() # Set up a mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost('MailHost') self.portal.MailHost.smtp_host = 'localhost' if not IS_PLONE_5: # BBB self.portal.email_from_address = "*****@*****.**" else: registry = getUtility(IRegistry) self.mail_settings = registry.forInterface(IMailSchema, prefix='plone') self.mail_settings.email_from_address = "*****@*****.**" self.mail_settings.smtp_host = u"localhost" sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # We need to fake a valid mail setup self.mailhost = self.portal.MailHost self.newsletter.invokeFactory("ENLIssue", id="issue") self.newsletter.issue.title = \ "This is a very long newsletter issue title with special "\ "characters such as äüö. Will this really work?"
def test_portal_mail_settings(self): settings = get_portal_mail_settings() self.assertEqual('*****@*****.**', settings.email_from_address) self.assertEqual(u'Plone Master', settings.email_from_name) self.assertEqual(u'example.com', settings.smtp_host) self.assertEqual(25, settings.smtp_port) self.assertEqual(u'*****@*****.**', settings.smtp_userid) self.assertEqual(u'Password', settings.smtp_pass)
def test_portal_mail_settings(self): settings = get_portal_mail_settings() self.assertEqual("*****@*****.**", settings.email_from_address) self.assertEqual("Plone Master", settings.email_from_name) self.assertEqual("example.com", settings.smtp_host) self.assertEqual(25, settings.smtp_port) self.assertEqual("*****@*****.**", settings.smtp_userid) self.assertEqual("Password", settings.smtp_pass)
def setUp(self): self.portal = self.layer["portal"] self.catalog = getToolByName(self.portal, "portal_catalog") setRoles(self.portal, TEST_USER_ID, ["Manager"]) # creating test objects: folder, news, newsletter and subscriber self.portal.invokeFactory("Folder", "testfolder") self.folder = self.portal["testfolder"] self.folder.invokeFactory("News Item", "news01") self.folder.invokeFactory("Newsletter", "daily-news") self.newsletter = self.folder["daily-news"] self.newsletter.title = u"Daily News" # XXX check if we could ovaid this by using defaults from site settings self.newsletter.sender_email = u"*****@*****.**" self.newsletter.sender_name = u"ACME newsletter" self.newsletter.test_email = u"*****@*****.**" news_collection = api.content.create( type="Collection", id="news-collection", title=u"News Collection", container=self.folder, ) query = [{ "i": "portal_type", "o": "plone.app.querystring.operation.selection.is", "v": ["News Item"], }] news_collection.setQuery(query) news_collection.aggregation_template = "aggregation_generic_listing" transaction.commit() intids = getUtility(IIntIds) to_id = intids.getId(news_collection) self.newsletter.content_aggregation_sources = [RelationValue(to_id)] api.content.create( type="Newsletter Subscriber", id="subscriber01", container=self.newsletter, email=u"*****@*****.**", ) self.view = getMultiAdapter((self.newsletter, self.layer["request"]), name="daily-issue") self.mail_settings = get_portal_mail_settings() self.mail_settings.email_from_address = "*****@*****.**" # setting a Mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost("MailHost") sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost)
def setUp(self): self.portal = self.layer["portal"] self.catalog = getToolByName(self.portal, "portal_catalog") setRoles(self.portal, TEST_USER_ID, ["Manager"]) # creating test objects: folder, news, newsletter and subscriber self.portal.invokeFactory("Folder", "testfolder") self.folder = self.portal["testfolder"] self.folder.invokeFactory("News Item", "news01") self.folder.invokeFactory("EasyNewsletter", "daily-news") self.newsletter = self.folder["daily-news"] self.newsletter.setTitle("Daily News") # if IS_PLONE_5: # # make sure that Collections have the referenceable behavior: # fti = getUtility(IDexterityFTI, name='Collection') # referenceable = u'plone.app.referenceablebehavior.referenceable.IReferenceable' # noqa # behaviors = list(fti.behaviors) # if referenceable not in behaviors: # behaviors.append(referenceable) # fti.behaviors = tuple(behaviors) news_collection = api.content.create( type="Collection", id='news-collection', title=u'News Collection', container=self.folder) query = [{ 'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['News Item'], }] news_collection.setQuery(query) self.newsletter.setContentAggregationSources(IUUID(news_collection)) self.newsletter.invokeFactory("ENLSubscriber", "subscriber01") self.view = getMultiAdapter( (self.newsletter, self.layer["request"]), name="daily-issue" ) self.mail_settings = get_portal_mail_settings() self.mail_settings.email_from_address = "*****@*****.**" # setting a Mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost("MailHost") sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost)
def send_unsubscribe_email(self, subscriber): newsletter = self.context catalog = api.portal.get_tool(name="portal_catalog") query = {} query["portal_type"] = "Newsletter Subscriber" query["email"] = subscriber results = catalog.unrestrictedSearchResults(query) if results: subscriber_brain = results[0] unsubscribe_url = ( self.newsletter_url + "/unsubscribe?subscriber=" + subscriber_brain.UID ) unsubscribe_header_msgid = _( "you_requested_to_unsubscribe", default="You requested to unsubscribe from the following newsletter: ${title}", mapping={"title": newsletter.title}, ) msg_text = "{0}\n{1}: {2}".format( translate(unsubscribe_header_msgid), newsletter.unsubscribe_string, unsubscribe_url, ) settings = get_portal_mail_settings() api.portal.send_email( recipient=subscriber, sender=settings.email_from_address, subject="{0}: {1}".format( newsletter.title, _("confirm newsletter unsubscription") ), body=msg_text, ) api.portal.show_message( message=_("We send you an email, please confirm this unsubscription."), request=self.request, type="info", ) else: # todo: write an extra error msg if a plone user wants to # unsubscribe himself api.portal.show_message( message=_("Your email address could not be found in subscribers."), request=self.request, type="error", )
def setUp(self): self.mail_settings = get_portal_mail_settings() self.portal = self.layer["portal"] self.request = self.layer["request"] setRoles(self.portal, TEST_USER_ID, ["Manager"]) login(self.portal, TEST_USER_NAME) self.portal.invokeFactory("Folder", "test-folder") self.folder = self.portal["test-folder"] self.portal = self.layer["portal"] self.folder.invokeFactory("Newsletter", "newsletter") self.newsletter = self.folder.newsletter self.newsletter.sender_email = "*****@*****.**" self.newsletter.sender_name = "ACME newsletter" self.newsletter.test_email = "*****@*****.**" prologue_output = self.newsletter.default_prologue.output self.default_prologue = RichTextValue( raw=prologue_output, mimeType="text/html", outputMimeType="text/x-plone-outputfilters-html", ) epilogue_output = self.newsletter.default_epilogue.output self.default_epilogue = RichTextValue( raw=epilogue_output, mimeType="text/html", outputMimeType="text/x-plone-outputfilters-html", ) # Set up a mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost("MailHost") sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # We need to fake a valid mail setup # self.mail_settings.email_from_address = u'*****@*****.**' self.mailhost = self.portal.MailHost # image for image testing self.folder.invokeFactory("Image", "image") self.image = self.folder.image image = self.folder["image"] image.title = "My Image" image.description = "This is my image." image.image = dummy_image(image) self.image = image
def send_unsubscribe_email(self, subscriber): newsletter = self.context catalog = api.portal.get_tool(name="portal_catalog") query = {} query["portal_type"] = "Newsletter Subscriber" query["email"] = subscriber results = catalog.unrestrictedSearchResults(query) if results: subscriber_brain = results[0] unsubscribe_url = ( self.newsletter_url + "/unsubscribe?subscriber=" + subscriber_brain.UID ) msg_text = """%s: %s""" % ( newsletter.unsubscribe_string, unsubscribe_url, ) settings = get_portal_mail_settings() api.portal.send_email( recipient=subscriber, sender=settings.email_from_address, subject=_(u"confirm newsletter unsubscription"), body=msg_text, ) api.portal.show_message( message=_("We send you an email, please confirm this unsubscription."), request=self.request, type="info", ) else: # todo: write an extra error msg if a plone user wants to # unsubscribe himself api.portal.show_message( message=_("Your email address could not be found in subscribers."), request=self.request, type="error", )
def setUp(self): self.portal = self.layer["portal"] self.portal_url = self.portal.portal_url() # create EasyNewsletter instance and add some subscribers setRoles(self.portal, TEST_USER_ID, ["Manager"]) login(self.portal, TEST_USER_NAME) self.newsletter = api.content.create( container=self.portal, type="Newsletter", id="enl1", title="ENL 1", sneder_email="*****@*****.**", sender_name="ACME newsletter", test_email="*****@*****.**", ) self.mail_settings = get_portal_mail_settings() # Set up a mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost("MailHost") self.portal.MailHost.smtp_host = "localhost" registry = getUtility(IRegistry) self.mail_settings = registry.forInterface(IMailSchema, prefix="plone") self.mail_settings.email_from_address = "*****@*****.**" self.mail_settings.smtp_host = "localhost" sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # We need to fake a valid mail setup self.mailhost = self.portal.MailHost api.content.create( container=self.newsletter, type="Newsletter Issue", id="issue", title="This is a very long newsletter issue title with special " "characters such as äüö. Will this really work?", )
def register_subscriber(self): """ """ messages = IStatusMessage(self.request) path_to_easynewsletter = self.request.get("newsletter") # remove leading slash from paths like: /mynewsletter path_to_easynewsletter = path_to_easynewsletter.strip("/") newsletter_container = self.portal.unrestrictedTraverse( path_to_easynewsletter) subscriber = self.request.get("subscriber") try: valid_subscriber = validate_email(subscriber) except EmailNotValidError as e: messages.addStatusMessage( _("Please enter a valid email address.\n{0}".format(e)), "error") return self._msg_redirect(newsletter_container) lastname = self.request.get("name", "") firstname = self.request.get("firstname", "") name_prefix = self.request.get("name_prefix", "") portal_state = getMultiAdapter((self.context.aq_inner, self.request), name="plone_portal_state") current_language = portal_state.language() nl_language = self.request.get("nl_language", current_language) salutation = self.request.get("salutation", "") organization = self.request.get("organization", "") norm = queryUtility(IIDNormalizer) normalized_subscriber = norm.normalize(valid_subscriber.email) if normalized_subscriber in newsletter_container.objectIds(): messages.addStatusMessage( _("Your email address is already registered."), "error") return self._msg_redirect(newsletter_container) subscriber_data = {} subscriber_data["subscriber"] = valid_subscriber.email subscriber_data["lastname"] = lastname subscriber_data["firstname"] = firstname subscriber_data["name_prefix"] = name_prefix subscriber_data["nl_language"] = nl_language subscriber_data["salutation"] = salutation subscriber_data["organization"] = organization subscriber_data["path_to_easynewsletter"] = path_to_easynewsletter # use password reset tool to create a hash pwr_data = self._requestReset(subscriber_data["subscriber"]) hashkey = pwr_data["randomstring"] enl_registration_tool = queryUtility(IENLRegistrationTool, "enl_registration_tool") if hashkey not in enl_registration_tool.objectIds(): enl_registration_tool[hashkey] = RegistrationData( hashkey, **subscriber_data) msg_subject = (newsletter_container. subscriber_confirmation_mail_subject.replace( "${portal_url}", self.portal_url.strip("http://"))) confirmation_url = (self.portal_url + "/confirm-subscriber?hkey=" + str(hashkey)) confirmation_url = protect.utils.addTokenToUrl(confirmation_url) msg_text = newsletter_container.subscriber_confirmation_mail_text.replace( "${newsletter_title}", newsletter_container.title) msg_text = msg_text.replace("${subscriber_email}", subscriber_data["subscriber"]) msg_text = msg_text.replace("${confirmation_url}", confirmation_url) settings = get_portal_mail_settings() msg_sender = settings.email_from_address msg_receiver = subscriber msg = emails.Message( text=msg_text, subject=msg_subject, mail_from=msg_sender, mail_to=msg_receiver, ) self.portal.MailHost.send(msg.as_string()) messages.addStatusMessage( _("Your email has been registered. \ A confirmation email was sent to your address. Please check \ your inbox and click on the link in the email in order to \ confirm your subscription."), "info", ) return self._msg_redirect(newsletter_container)
def register_subscriber(self): """ """ charset = get_email_charset() subscriber = self.request.get("subscriber") lastname = self.request.get("name", "") firstname = self.request.get("firstname", "") name_prefix = self.request.get("name_prefix", "") portal_state = getMultiAdapter((self.context.aq_inner, self.request), name=u'plone_portal_state') current_language = portal_state.language() nl_language = self.request.get("nl_language", current_language) salutation = self.request.get("salutation", "") organization = self.request.get("organization", "") path_to_easynewsletter = self.request.get("newsletter") # remove leading slash from paths like: /mynewsletter path_to_easynewsletter = path_to_easynewsletter.strip('/') newsletter_container = self.portal.unrestrictedTraverse( path_to_easynewsletter) messages = IStatusMessage(self.request) if not subscriber: messages.addStatusMessage(_("Please enter a valid email address."), "error") return self._msg_redirect(newsletter_container) mo = re.search(EMAIL_RE, subscriber) if not mo: messages.addStatusMessage(_("Please enter a valid email address."), "error") return self._msg_redirect(newsletter_container) norm = queryUtility(IIDNormalizer) normalized_subscriber = norm.normalize(subscriber) if normalized_subscriber in newsletter_container.objectIds(): messages.addStatusMessage( _("Your email address is already registered."), "error") return self._msg_redirect(newsletter_container) subscriber_data = {} subscriber_data["subscriber"] = subscriber subscriber_data["lastname"] = lastname subscriber_data["firstname"] = firstname subscriber_data["name_prefix"] = name_prefix subscriber_data["nl_language"] = nl_language subscriber_data["salutation"] = salutation subscriber_data["organization"] = organization subscriber_data["path_to_easynewsletter"] = path_to_easynewsletter # use password reset tool to create a hash pwr_data = self._requestReset(subscriber) hashkey = pwr_data['randomstring'] enl_registration_tool = queryUtility(IENLRegistrationTool, 'enl_registration_tool') if hashkey not in enl_registration_tool.objectIds(): enl_registration_tool[hashkey] = RegistrationData( hashkey, **subscriber_data) msg_subject = newsletter_container\ .getRawSubscriber_confirmation_mail_subject().replace( "${portal_url}", self.portal_url.strip('http://')) confirmation_url = self.portal_url + '/confirm-subscriber?hkey=' +\ str(hashkey) msg_text = newsletter_container\ .getRawSubscriber_confirmation_mail_text().replace( "${newsletter_title}", newsletter_container.Title()) msg_text = msg_text.replace("${subscriber_email}", subscriber) msg_text = msg_text.replace("${confirmation_url}", confirmation_url) settings = get_portal_mail_settings() msg_sender = settings.email_from_address msg_receiver = subscriber msg = MIMEText(msg_text, "plain", charset) msg['To'] = msg_receiver msg['From'] = msg_sender msg['Subject'] = msg_subject # msg.epilogue = '' self.portal.MailHost.send(msg.as_string()) messages.addStatusMessage( _("Your email has been registered. \ A confirmation email was sent to your address. Please check \ your inbox and click on the link in the email in order to \ confirm your subscription."), "info") return self._msg_redirect(newsletter_container)
def register_subscriber(self): """ """ charset = get_email_charset() subscriber = self.request.get("subscriber") lastname = self.request.get("name", "") firstname = self.request.get("firstname", "") name_prefix = self.request.get("name_prefix", "") portal_state = getMultiAdapter( (self.context.aq_inner, self.request), name=u'plone_portal_state' ) current_language = portal_state.language() nl_language = self.request.get("nl_language", current_language) salutation = self.request.get("salutation", "") organization = self.request.get("organization", "") path_to_easynewsletter = self.request.get("newsletter") # remove leading slash from paths like: /mynewsletter path_to_easynewsletter = path_to_easynewsletter.strip('/') newsletter_container = self.portal.unrestrictedTraverse( path_to_easynewsletter) messages = IStatusMessage(self.request) if not subscriber: messages.addStatusMessage( _("Please enter a valid email address."), "error") return self._msg_redirect(newsletter_container) mo = re.search(EMAIL_RE, subscriber) if not mo: messages.addStatusMessage( _("Please enter a valid email address."), "error") return self._msg_redirect(newsletter_container) norm = queryUtility(IIDNormalizer) normalized_subscriber = norm.normalize(subscriber) if normalized_subscriber in newsletter_container.objectIds(): messages.addStatusMessage( _("Your email address is already registered."), "error") return self._msg_redirect(newsletter_container) subscriber_data = {} subscriber_data["subscriber"] = subscriber subscriber_data["lastname"] = lastname subscriber_data["firstname"] = firstname subscriber_data["name_prefix"] = name_prefix subscriber_data["nl_language"] = nl_language subscriber_data["salutation"] = salutation subscriber_data["organization"] = organization subscriber_data["path_to_easynewsletter"] = path_to_easynewsletter # use password reset tool to create a hash pwr_data = self._requestReset(subscriber) hashkey = pwr_data['randomstring'] enl_registration_tool = queryUtility( IENLRegistrationTool, 'enl_registration_tool') if hashkey not in enl_registration_tool.objectIds(): enl_registration_tool[hashkey] = RegistrationData( hashkey, **subscriber_data) msg_subject = newsletter_container\ .getRawSubscriber_confirmation_mail_subject().replace( "${portal_url}", self.portal_url.strip('http://')) confirmation_url = self.portal_url + '/confirm-subscriber?hkey=' +\ str(hashkey) msg_text = newsletter_container\ .getRawSubscriber_confirmation_mail_text().replace( "${newsletter_title}", newsletter_container.Title()) msg_text = msg_text.replace("${subscriber_email}", subscriber) msg_text = msg_text.replace( "${confirmation_url}", confirmation_url) settings = get_portal_mail_settings() msg_sender = settings.email_from_address msg_receiver = subscriber msg = MIMEText(msg_text, "plain", charset) msg['To'] = msg_receiver msg['From'] = msg_sender msg['Subject'] = msg_subject # msg.epilogue = '' self.portal.MailHost.send(msg.as_string()) messages.addStatusMessage(_("Your email has been registered. \ A confirmation email was sent to your address. Please check \ your inbox and click on the link in the email in order to \ confirm your subscription."), "info") return self._msg_redirect(newsletter_container)
def setUp(self): self.mail_settings = get_portal_mail_settings() self.portal = self.layer["portal"] self.request = self.layer["request"] setRoles(self.portal, TEST_USER_ID, ["Manager"]) login(self.portal, TEST_USER_NAME) self.portal.invokeFactory("Folder", "test-folder") self.folder = self.portal["test-folder"] self.portal = self.layer["portal"] self.folder.invokeFactory("Newsletter", "newsletter") self.newsletter = self.folder.newsletter self.newsletter.sender_email = "*****@*****.**" self.newsletter.sender_name = "ACME newsletter" self.newsletter.test_email = "*****@*****.**" prologue_output = self.newsletter.default_prologue.output self.default_prologue = RichTextValue( raw=prologue_output, mimeType="text/html", outputMimeType="text/x-plone-outputfilters-html", ) epilogue_output = self.newsletter.default_epilogue.output self.default_epilogue = RichTextValue( raw=epilogue_output, mimeType="text/html", outputMimeType="text/x-plone-outputfilters-html", ) # Set up a mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost("MailHost") sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # We need to fake a valid mail setup # self.mail_settings.email_from_address = u'*****@*****.**' self.mailhost = self.portal.MailHost # image1 for image testing self.folder.invokeFactory("Image", "image1") self.image1 = self.folder.image1 image1 = self.folder["image1"] image1.title = "My Image 1" image1.description = "This is my image." image1.image = dummy_image() self.image1 = image1 self.image1_tag = api.content.get_view("images", self.image1, self.request).tag( "image", "thumb") # image2 for image testing self.folder.invokeFactory("Image", "image2") self.image2 = self.folder.image2 image2 = self.folder["image2"] image2.title = "My Image 2" image2.description = "This is my image." image2.image = dummy_image(imgname="img2.jpg") self.image2 = image2 image2_images = api.content.get_view("images", self.image2, self.request) self.image2_scale = image2_images.scale("image", "thumb") self.image2_url = self.image2_scale.url self.image2_uid = self.image2_scale.uid # image3 for image testing self.folder.invokeFactory("Image", "image3") self.image3 = self.folder.image3 image3 = self.folder["image3"] image3.title = "My Image 3" image3.description = "This is my image." image3.image = dummy_image(imgname="img3.jpg") self.image3 = image3 image3_images = api.content.get_view("images", self.image3, self.request) self.image3_scale = image3_images.scale("image", "thumb") self.image3_url = self.image3_scale.url self.image3_uid = self.image3_scale.uid