Welcome, guest | Sign In | My Account | Store | Cart

Notice! PyPM is being replaced with the ActiveState Platform, which enhances PyPM’s build and deploy capabilities. Create your free Platform account to download ActivePython or customize Python with the packages you require and get automatic updates.

pypm install collective.emaillogin

How to install collective.emaillogin

  1. Download and install ActivePython
  2. Open Command Prompt
  3. Type pypm install collective.emaillogin
 Python 2.7Python 3.2Python 3.3
Windows (32-bit)
1.3Never BuiltWhy not?
1.2 Available View build log
1.1 Available View build log
1.0 Available View build log
0.8 Available View build log
Windows (64-bit)
1.3Never BuiltWhy not?
1.2 Available View build log
1.1 Available View build log
1.0 Available View build log
0.8 Available View build log
Mac OS X (10.5+)
1.3Never BuiltWhy not?
1.2 Available View build log
1.1 Available View build log
1.0 Available View build log
0.8 Available View build log
Linux (32-bit)
1.3Never BuiltWhy not?
1.2 Available View build log
1.1 Available View build log
1.0 Available View build log
0.8 Available View build log
Linux (64-bit)
1.3 Available View build log
1.2 Available View build log
1.1 Available View build log
1.0 Available View build log
0.8 Available View build log
Lastest release
version 1.3 on Jan 9th, 2014

collective.emaillogin Package Readme


This package allow logins with email address rather than login name. It applies some (somewhat hackish) patches to Plone's membership tool and memberdata class, after which the email address, on save, is saved as the login name for members. This makes that members can log in using their email address rather than some additional id, and when the email address changes the login name is changed along with it.

Since version 1.0 we explicitly convert e-mail addresses to lowercase. You should be able to login with any mix of upper and lower case letters.


Add it to the eggs of your Plone 3 buildout. With Plone 3.2.x or earlier also add it to the zcml option of your instance. Install it in the Add-ons (Extra Packages) control panel in your Plone Site. Installing simply adds a new skin layer named 'emaillogin'.

It is best to install this on a fresh Plone site. The login names of current users are not changed. There is code in core Plone 4 for this, so you may want to look there if you need it.


A major part of this package works by patching several core Plone and CMF classes. The patches also apply when you do not have this package installed in your Plone Site. This may give unwanted results, like changing the login name of a user when his or her e-mail address is changed. This also means that when you have multiple Plone Sites in one Zope instance, you should either install this package in all of them or not use it at all and remove it from your buildout.


When upgrading from version 0.8, an upgrade step is run to change all login names to lower case, for those login names that are already e-mail addresses.


No, these are not bugs. Or if they are bugs, then they are bugs that are too hard to fix without introducing other bugs. They might be unexpected though, so we call them gotchas.

  • Since version 1.0, whenever an e-mail address is set, we automatically convert it to lowercase. You cannot set an e-mail address to upper or mixed case. When logging in or resetting a password the case does not need to match: we look for the given login but also for the lowercased login.
  • As an administrator, when you change the login name of a user in the ZMI, this does not update the email.
  • When you register with original@example.org and change this to new@example.org, you can no longer login with your original address. You can only login with your current e-mail address, though the case (upper, lower, mixed) should not matter anymore.
  • The initial e-mail address is used as userid. This id never ever changes. In places where the userid is displayed this original userid is shown, which is normally fine until the email address is overwritten -- once this is done the original email address will be displayed rather than the new one. (Plone 4 fixes this in the core.) There may be some more spots in Plone that for example search only for users by id so when you use that to search on login name this may fail. Also, there are spots in the Plone or CMF or Zope code that have a userid as input but use it as login name or the other way around so be careful when you start hacking yourself.
  • If you register with one@example.org, then change it to two@example.org, then no one can register a new user with one@example.org or change the e-mail address of an existing user to one@example.org. This is because it will forever be used as userid. Note that when you now change your address to three@example.org, your intermediate address of two@example.org is free for the taking.
  • When you change your e-mail address, you do not get a confirmation e-mail to check if you did not make any typos and it is a real address. This means you will not be able to login if you do not remember this typo; a password reset will then also not work. This could be considered a problem of Plone in general and not specific for this add-on, though we are hit harder by it. Might be a nice candidate for a PLIP (PLone Improvement Proposal) or first an extra add-on.

In Plone 4 this package is deprecated, as Plone 4 already supports logging in with your email address as an option: http://dev.plone.org/plone/ticket/9214

So we strongly advise not to use this package on Plone 4. But your instance will still start up (tested on Plone 4.0a4) and you can uninstall the package through the UI. You may need to manually remove emaillogin from the skin selections in the Properties tab of portal_skins in the ZMI. Since the package does some patches on startup, you should still remove it from the eggs and zcml options of your instance, rerun buildout and start your instance again.

Changelog for collective.emaillogin

1.3 (2012-09-24)
1.2 (2012-02-14)
  • Patch RegistrationTool.isMemberIdAllowed. When the id that is passed in is already in use as login name, we do not accept it as user id either. Also, in various spots where isMemberIdAllowed is called, the id is really meant as login name. Possibly this fix is only needed for Plone 3.1 and earlier, as I am sure I have tested this before on Plone 3.3.6. [maurits]
  • Patch the login method from Products.PlonePAS.plugins.cookie_handler.ExtendedCookieAuthHelper. This is the code from Plone 3.3.6; it is included because Plone 3.1.7 does the wrong thing for us here. [maurits]
1.1 (2011-12-13)
  • Patch CMFPlone.MembershipTool.testCurrentPassword to authenticate with the login name. The code in Plone 3.3.5 itself already works (and is simply copied here), but Plone 3.1.7 has an error that is triggered for us as the user id is not always the same as the login name. [maurits]
1.0 (2011-11-23)
  • In the mailPassword method explicitly disallow looking for a member with the given forgotten user id when this is an e-mail address. We only search for users with that e-mail address as login name. This only has an effect when you have changed your e-mail address to something really different (instead of just a change in the case). Without this change, you could reset your password with your old address, but could not login with that address. [maurits]
  • Refactored authenticateCredentials. This avoids getting a message stating you are logged in when in fact you are not logged in. [maurits]
  • Added upgrade step to migrate all existing users to have a lowercase login name (when their e-mail address is used as login name). [maurits]
  • Patch PloneTool.setMemberProperties to always set the e-mail address to lower case and to update the login name when the e-mail address changes. [maurits]
  • In validate_personalize.vpy turn the e-mail address to lowercase. [maurits]
  • Patch Products.PlonePAS.tools.membership.MembershipTool.addMember to always add the member as lowercase, also when not called from registered.cpy [maurits]
  • In join_form_validate.vpy turn the e-mail address to lowercase. [maurits]
  • Changed getMemberByLoginName and ZODBUserManager.authenticateCredentials to explicitly search for the lower case login name if the initial literal search does not work. [maurits]
  • Added classifiers for Plone 3.2 and 3.3 in setup.py. [maurits]
0.8 (2010-05-18)
  • Removed mail_me functionality from join_form as this claimed to be sending the password, which Plone has not been doing for a long time, if ever. The backend handling for this was already removed from Plone itself. [maurits]
  • Fixed wrong condition and double definition where allowEnterPassword meant you were actually not allowed to enter a password. It worked fine but was confusingly stated the wrong way around. [maurits]
0.7 (2010-02-23)
  • added german translation [deichi]
0.6 (2009-05-13)
  • Patched some methods in PasswordResetTool and RegistrationTool to make sure you can actually reset your password, even after changing your email address. [maurits]
  • Use email address instead of login/user name in some more spots, like the login form and in validation. [maurits]
0.5 (2009-05-06)
  • Fixed error on reinstall where the default skin would be set to the no longer existing emaillogin skin. [maurits]
  • Added profiles/default/metadata.xml: version = 1. [maurits]
  • After a successfull edit of the personalize form, do not travere to the personalize_form, but redirect to it. This solves an error "Forbidden: Form authenticator is invalid." when changing your email address (= login name) and then saving the form a second time. [maurits]
  • Changed validate_personalize.vpy to allow changing your preferences again. [maurits]
  • Adapted validate_personalize.vpy. Change compared to default Plone: check the validity of the email address as a login name. [maurits]
  • Added i18n. [maurits]
0.4 (2009-05-05)
  • Also show the error when the email address is not a valid username. [maurits+mike]
0.3 (2009-05-05)
  • Removed personalize_form.cpt(.metadata) as there was no important difference with the one from default Plone. [maurits+mike]
  • Take over a small change in default Plone to the personalize.cpy.
  • Fixed join form to also work in newer Plones by using the @@authenticator provider for protecting this join form. Keeps working in Plone 3.0 as well (which does not use plone.protect). [maurits+mike]
0.2 (2009-05-05)
  • No longer register our own skin path (skin selection), but just add our emaillogin skin layer to the existing skin selections. [maurits+mike]
0.1 (2008-01-15)
  • Initial release. [maurits, guido]

Subscribe to package updates

Last updated Jan 9th, 2014

Download Stats

Last month:5

What does the lock icon mean?

Builds marked with a lock icon are only available via PyPM to users with a current ActivePython Business Edition subscription.

Need custom builds or support?

ActivePython Enterprise Edition guarantees priority access to technical support, indemnification, expert consulting and quality-assured language builds.

Plan on re-distributing ActivePython?

Get re-distribution rights and eliminate legal risks with ActivePython OEM Edition.