--- a/ForgeMail/forgemail/open_relay.py +++ b/ForgeMail/forgemail/open_relay.py @@ -13,19 +13,45 @@ parser.add_option('-t', '--tls', dest='tls', action='store_true', default=False) parser.add_option('-l', '--login', dest='login', action='store_true', default=False) (options, args) = parser.parse_args() - if options.ssl: - smtp_client = smtplib.SMTP_SSL(options.host, int(options.port)) - else: - smtp_client = smtplib.SMTP(options.host, int(options.port)) - if options.tls: - smtp_client.starttls() if options.login: username = raw_input('Username:') password = getpass('Password:') - smtp_client.login(username, password) + else: + username = password = None + smtp_client = MailClient(options.host, + int(options.port), + options.ssl, + options.tls, + username, password) server = MailServer(('0.0.0.0', 8826), None, smtp_client=smtp_client) asyncore.loop() + +class MailClient(object): + + def __init__(self, host, port, ssl, tls, username, password): + self.host, self.port, self.ssl, self.tls, self.username, self.password = \ + host, port, ssl, tls, username, password + self._client = None + self._connect() + + def sendmail(self, mailfrom, rcpttos, data): + print 'Sending mail to %s' % rcpttos + try: + self._client.sendmail(mailfrom, rcpttos, data) + except: + self._connect() + self._client.sendmail(mailfrom, rcpttos, data) + + def _connect(self): + if self.ssl: + self._client = smtplib.SMTP_SSL(self.host, int(self.port)) + else: + self._client = smtplib.SMTP(self.host, int(self.port)) + if self.tls: + self._client.starttls() + if self.username: + self._client.login(self.username, self.password) class MailServer(smtpd.SMTPServer):