'Add an email address for a participant.
This is called when adding a new email address, and when resending the
verification email for an unverified email address.
:param unicode email: the email address to add
:param gratipay.models.package.Package packages: packages to optionally
also verify ownership of
:returns: ``None``
:raises EmailAlreadyVerified: if the email is already verified for
this participant (unless they\'re claiming packages)
:raises EmailTaken: if the email is verified for a different participant
:raises EmailNotOnFile: if the email address is not on file for any of
the packages
:raises TooManyEmailAddresses: if the participant already has 10 emails
:raises Throttled: if the participant adds too many emails too quickly'

def start_email_verification(self, email, *packages):

    with self.db.get_cursor() as c:
        self.validate_email_verification_request(c, email, *packages)
        link = self.get_email_verification_link(c, email, *packages)
    verified_emails = self.get_verified_email_addresses()
    kwargs = dict(npackages=len(packages), package_name=(packages[0].name if packages else u''), new_email=email, new_email_verified=(email in verified_emails), link=link, include_unsubscribe=False)
    self.app.email_queue.put(self, u'verification', email=email, **kwargs)
    if (self.email_address and (self.email_address != email)):
        self.app.email_queue.put(self, u'verification-notice', _user_initiated=False, **kwargs)
