示例#1
0
 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")
示例#3
0
    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)
示例#4
0
    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 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
示例#7
0
 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?"
示例#9
0
 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(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)
示例#12
0
    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)
示例#14
0
 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?",
     )
示例#18
0
    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)
示例#19
0
    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)
示例#21
0
    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