Package: collective.MockMailHost
Introductioncollective.MockMailHostenables integration testing of email functionality
fromPlone. Simply add this egg to your [test] runner section, and install
this product through yourLayerorTestCase.NoteTHIS IS FOR TESTING PURPOSE ONLY, do not use this product on your
running Plone site. It replaces the standard MailHost with a Mock
MailHost that you can poke at to check email content and recipients.Has been tested with Plone 4 but should also work with earlier versions.IntegrationExample how to integratecollective.MockMailHostto your testing setup
based onplone.app.testing. Add the package to your extras_requires section
in your package’ssetup.pyfile, so buildout will automatically download
the package for you.:setup(name='my.package',
      ...
      extras_require={
        'test': [
            'plone.app.testing',
            'collective.MockMailHost',
        ]
      },
      ...
      )Your test layer setup could look like this example below:from plone.app.testing import helpers, layers
from plone.testing import z2


class MyLayer(helpers.PloneSandboxLayer):
    defaultBases = (layers.PLONE_FIXTURE, )

    def setUpZope(self, app, configurationContext):
        # Load zcml
        import collective.MockMailHost
        self.loadZCML(package=collective.MockMailHost)

        # Install product and call its initialize() function
        z2.installProduct(app, 'collective.MockMailHost')

        # Note: you can skip this if my.product is not a Zope 2-style
        # product, i.e. it is not in the Products.* namespace and it
        # does not have a <five:registerPackage /> directive in its
        # configure.zcml.

    def tearDownZope(self, app):
        # Uninstall product
        z2.uninstallProduct(app, 'collective.MockMailHost')

        # Note: Again, you can skip this if my.product is not a Zope 2-
        # style product

    def setUpPloneSite(self, portal):
        helpers.quickInstallProduct(portal, 'collective.MockMailHost')

        helpers.applyProfile(portal, 'collective.MockMailHost:default')

MY_FIXTURE = MyLayer()Using a member-posting forum>>> from Products.CMFCore.utils import getToolByName
>>> from Products.MailHost.interfaces import IMailHost
>>> from zope.component import getUtility>>> app = layer['app']
>>> portal = layer['portal']Test starting conversations, replying and modifying comments in a default
member-posting forum.Let us log all exceptions, which is useful for debugging. Also, clear portlet
slots, to make the test browser less confused by things like the recent portlet
and the navtree.>>> portal.error_log._ignored_exceptions = ()
>>> portal.left_slots = portal.right_slots = []
>>> workflow = portal.portal_workflowValidate mailhost replacement>>> portal.MailHost
<MockMailHost at ...>>>> getToolByName(portal, 'MailHost')
<MockMailHost at ...>>>> getUtility(IMailHost)
<MockMailHost at ...>Send email>>> to_ = "member@example.com"
>>> from_ = "admin@example.com"
>>> msg = """
...
... Dear Sir:
...
... Thank you"""
>>> portal.MailHost.send(msg, to_, from_)
>>> len(portal.MailHost.messages)
1
>>> 'To: member@example.com' in portal.MailHost.messages[0]
True
>>> 'From: admin@example.com' in portal.MailHost.messages[0]
True
>>> 'Dear Sir:' in portal.MailHost.messages[0]
True
>>> portal.MailHost.reset()
>>> len(portal.MailHost.messages)
0Changelog2.0.0 (2018-11-06)Breaking changes:Do not depend on old SecureMailHost any longer.
[pbauer]New features:Python 3 support.
[pbauer]1.1.0 (2018-06-27)Fix import location, Globals has been removed.
[gforcada]Rework tests setup.
[gforcada]1.0 (2016-01-25)Fix MIMEText compatibility (broken since 0.9).
[jone]0.9 (2015-07-10)Clean up msg before sending. Otherwise Plone self registration
email does not work [sureshvv]0.8 (2015-06-13)Add browser view for functional testing [Casecarsid]0.7 (2013-07-05)MANIFEST [sureshvv]0.6 (2013-07-03)Track msg_type also.
[sureshvv]Behave more likecollective.testcaselayer’s MockMailHost.
[saily]Documentation updates
[saily]0.5 - 2012-09-25Remove ZopeSkel and Paster dependency from setup.py
[saily]Moved to github and changed to README.rst, links in setup.py
[saily]Allow multiple paramters forsendandsecureSendmethod in
MockMailHost class.  [saily]0.4 (2011-05-17)Register MockMailHost in SiteManager to get MockMailHost when usinggetToolByName(context, 'MailHost')orgetUtility(IMailHost).
[saily]Inherit from MailHost instead of SimpleItem
[saily]Implement the secureSend method
[saily]0.3 (2011-04-04)Add**kwargsto MockMailHost’s send method to support mto, mfrom, …
keyword arguments as default MailHost does.  [saily]Added file for generic setup various handlers
[sureshvv]0.2 (2010-05-21)Added tests
[sureshvv]0.1 (2010-05-16)Initial release
[sureshvv]