docs: def issueViaEmail(self, issuer, email, product, templateData,
                        domainName, httpPort=80):
          """
          Send a ticket via email to the supplied address, which, when claimed, will
          create an avatar and allow the given product to endow it with
          things.
  
          @param issuer: An object, preferably a user, to track who issued this
          ticket.
  
          @param email: a str, formatted as an rfc2821 email address
          (user@domain) -- source routes not allowed.
  
          @param product: an instance of L{Product}
  
          @param domainName: a domain name, used as the domain part of the
          sender's address, and as the web server to generate a link to within
          the email.
  
          @param httpPort: a port number for the web server running on domainName
  
          @param templateData: A string containing an rfc2822-format email
          message, which will have several python values interpolated into it
          dictwise:
  
              %(from)s: To be used for the From: header; will contain an
               rfc2822-format address.
  
              %(to)s: the address that we are going to send to.
  
              %(date)s: an rfc2822-format date.
  
              %(message-id)s: an rfc2822 message-id
  
              %(link)s: an HTTP URL that we are generating a link to.
  
          """
  
          ticket = self.createTicket(issuer,
                                     unicode(email, 'ascii'),
                                     product)
          nonce = ticket.nonce
  
          signupInfo = {'from': 'signup@'+domainName,
                        'to': email,
                        'date': rfc822.formatdate(),
                        'message-id': smtp.messageid(),
                        'link': self.ticketLink(domainName, httpPort, nonce)}
  
          msg = templateData % signupInfo
  
          return ticket, _sendEmail(signupInfo['from'], email, msg)