| Index: third_party/twisted_8_1/twisted/mail/tap.py
|
| diff --git a/third_party/twisted_8_1/twisted/mail/tap.py b/third_party/twisted_8_1/twisted/mail/tap.py
|
| deleted file mode 100644
|
| index 6ce3ebe15c099579ed9b402cc3d81b397bd511e9..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/mail/tap.py
|
| +++ /dev/null
|
| @@ -1,185 +0,0 @@
|
| -# -*- test-case-name: twisted.mail.test.test_options -*-
|
| -# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -
|
| -"""I am the support module for creating mail servers with 'mktap'
|
| -"""
|
| -
|
| -import os
|
| -import sys
|
| -
|
| -from twisted.mail import mail
|
| -from twisted.mail import maildir
|
| -from twisted.mail import relay
|
| -from twisted.mail import relaymanager
|
| -from twisted.mail import alias
|
| -
|
| -from twisted.python import usage
|
| -
|
| -from twisted.cred import checkers
|
| -from twisted.application import internet
|
| -
|
| -
|
| -class Options(usage.Options):
|
| - synopsis = "Usage: mktap mail [options]"
|
| -
|
| - optParameters = [
|
| - ["pop3", "p", 8110, "Port to start the POP3 server on (0 to disable).", usage.portCoerce],
|
| - ["pop3s", "S", 0, "Port to start the POP3-over-SSL server on (0 to disable).", usage.portCoerce],
|
| - ["smtp", "s", 8025, "Port to start the SMTP server on (0 to disable).", usage.portCoerce],
|
| - ["certificate", "c", None, "Certificate file to use for SSL connections"],
|
| - ["relay", "R", None,
|
| - "Relay messages according to their envelope 'To', using the given"
|
| - "path as a queue directory."],
|
| - ["hostname", "H", None, "The hostname by which to identify this server."],
|
| - ]
|
| -
|
| - optFlags = [
|
| - ["esmtp", "E", "Use RFC 1425/1869 SMTP extensions"],
|
| - ["disable-anonymous", None, "Disallow non-authenticated SMTP connections"],
|
| - ]
|
| - zsh_actions = {"hostname" : "_hosts"}
|
| -
|
| - longdesc = "This creates a mail.tap file that can be used by twistd."
|
| -
|
| - def __init__(self):
|
| - usage.Options.__init__(self)
|
| - self.service = mail.MailService()
|
| - self.last_domain = None
|
| -
|
| - def opt_passwordfile(self, filename):
|
| - """Specify a file containing username:password login info for authenticated ESMTP connections."""
|
| - ch = checkers.OnDiskUsernamePasswordDatabase(filename)
|
| - self.service.smtpPortal.registerChecker(ch)
|
| - opt_P = opt_passwordfile
|
| -
|
| - def opt_default(self):
|
| - """Make the most recently specified domain the default domain."""
|
| - if self.last_domain:
|
| - self.service.addDomain('', self.last_domain)
|
| - else:
|
| - raise usage.UsageError("Specify a domain before specifying using --default")
|
| - opt_D = opt_default
|
| -
|
| - def opt_maildirdbmdomain(self, domain):
|
| - """generate an SMTP/POP3 virtual domain which saves to \"path\"
|
| - """
|
| - try:
|
| - name, path = domain.split('=')
|
| - except ValueError:
|
| - raise usage.UsageError("Argument to --maildirdbmdomain must be of the form 'name=path'")
|
| -
|
| - self.last_domain = maildir.MaildirDirdbmDomain(self.service, os.path.abspath(path))
|
| - self.service.addDomain(name, self.last_domain)
|
| - opt_d = opt_maildirdbmdomain
|
| -
|
| - def opt_user(self, user_pass):
|
| - """add a user/password to the last specified domains
|
| - """
|
| - try:
|
| - user, password = user_pass.split('=', 1)
|
| - except ValueError:
|
| - raise usage.UsageError("Argument to --user must be of the form 'user=password'")
|
| - if self.last_domain:
|
| - self.last_domain.addUser(user, password)
|
| - else:
|
| - raise usage.UsageError("Specify a domain before specifying users")
|
| - opt_u = opt_user
|
| -
|
| - def opt_bounce_to_postmaster(self):
|
| - """undelivered mails are sent to the postmaster
|
| - """
|
| - self.last_domain.postmaster = 1
|
| - opt_b = opt_bounce_to_postmaster
|
| -
|
| - def opt_aliases(self, filename):
|
| - """Specify an aliases(5) file to use for this domain"""
|
| - if self.last_domain is not None:
|
| - if mail.IAliasableDomain.providedBy(self.last_domain):
|
| - aliases = alias.loadAliasFile(self.service.domains, filename)
|
| - self.last_domain.setAliasGroup(aliases)
|
| - self.service.monitor.monitorFile(
|
| - filename,
|
| - AliasUpdater(self.service.domains, self.last_domain)
|
| - )
|
| - else:
|
| - raise usage.UsageError(
|
| - "%s does not support alias files" % (
|
| - self.last_domain.__class__.__name__,
|
| - )
|
| - )
|
| - else:
|
| - raise usage.UsageError("Specify a domain before specifying aliases")
|
| - opt_A = opt_aliases
|
| -
|
| - def postOptions(self):
|
| - if self['pop3s']:
|
| - if not self['certificate']:
|
| - raise usage.UsageError("Cannot specify --pop3s without "
|
| - "--certificate")
|
| - elif not os.path.exists(self['certificate']):
|
| - raise usage.UsageError("Certificate file %r does not exist."
|
| - % self['certificate'])
|
| -
|
| - if not self['disable-anonymous']:
|
| - self.service.smtpPortal.registerChecker(checkers.AllowAnonymousAccess())
|
| -
|
| - if not (self['pop3'] or self['smtp'] or self['pop3s']):
|
| - raise usage.UsageError("You cannot disable all protocols")
|
| -
|
| -class AliasUpdater:
|
| - def __init__(self, domains, domain):
|
| - self.domains = domains
|
| - self.domain = domain
|
| - def __call__(self, new):
|
| - self.domain.setAliasGroup(alias.loadAliasFile(self.domains, new))
|
| -
|
| -def makeService(config):
|
| - if config['esmtp']:
|
| - rmType = relaymanager.SmartHostESMTPRelayingManager
|
| - smtpFactory = config.service.getESMTPFactory
|
| - else:
|
| - rmType = relaymanager.SmartHostSMTPRelayingManager
|
| - smtpFactory = config.service.getSMTPFactory
|
| -
|
| - if config['relay']:
|
| - dir = config['relay']
|
| - if not os.path.isdir(dir):
|
| - os.mkdir(dir)
|
| -
|
| - config.service.setQueue(relaymanager.Queue(dir))
|
| - default = relay.DomainQueuer(config.service)
|
| -
|
| - manager = rmType(config.service.queue)
|
| - if config['esmtp']:
|
| - manager.fArgs += (None, None)
|
| - manager.fArgs += (config['hostname'],)
|
| -
|
| - helper = relaymanager.RelayStateHelper(manager, 1)
|
| - helper.setServiceParent(config.service)
|
| - config.service.domains.setDefaultDomain(default)
|
| -
|
| - ctx = None
|
| - if config['certificate']:
|
| - from twisted.mail.protocols import SSLContextFactory
|
| - ctx = SSLContextFactory(config['certificate'])
|
| -
|
| - if config['pop3']:
|
| - s = internet.TCPServer(config['pop3'], config.service.getPOP3Factory())
|
| - s.setServiceParent(config.service)
|
| - if config['pop3s']:
|
| - s = internet.SSLServer(config['pop3s'],
|
| - config.service.getPOP3Factory(), ctx)
|
| - s.setServiceParent(config.service)
|
| - if config['smtp']:
|
| - f = smtpFactory()
|
| - f.context = ctx
|
| - if config['hostname']:
|
| - f.domain = config['hostname']
|
| - f.fArgs = (f.domain,)
|
| - if config['esmtp']:
|
| - f.fArgs = (None, None) + f.fArgs
|
| - s = internet.TCPServer(config['smtp'], f)
|
| - s.setServiceParent(config.service)
|
| - return config.service
|
|
|