Skip to main content

An extension to the standard python 2.x smtpd library implementing implicit/explicit SSL/TLS/STARTTLS

Project description

smtpd-tls

An extension to the python 2.x smtpd standard library implementing implicit/explicit (STARTTLS) SSL/TLS support

  • added STARTTLS handling

  • added implicit tls

just pass a configured ssl.context (certs, keys, protocols, auth, …) to smtpd-tls.SMTPServer()

original smtpd pydoc: https://docs.python.org/2/library/smtpd.html

Requires Python 2.7 or higher

Install

from pip

pip install smtpd-tls

from source

python setup.py install

verify:

#> python -c "import smtpd_tls; print smtpd_tls"
#> python -m smtpd_tls --help

Example

STARTTLS via smtp port 25:

#> python -m smtpd_tls --debug -c DebuggingServer --starttls --keyfile=../server.pem 0.0.0.0:25
DebuggingServer started at Thu Feb  4 16:57:06 2016
        Local addr: ('0.0.0.0', 25)
        Remote addr:('mail.somehost.com', 25)
        TLS Mode: explicit (plaintext until STARTTLS)
        TLS Context: <ssl.SSLContext object at 0x7f8fd8adbbb0>
Incoming connection from ('192.168.139.1', 39983)
Peer: ('192.168.139.1', 39983)
Data: 'ehlo [192.168.139.1]'
Data: 'STARTTLS'
Peer: ('192.168.139.1', 39983) - negotiated TLS: ('ECDHE-RSA-AES256-GCM-SHA384', 'TLSv1/SSLv3', 256)
Data: 'ehlo [192.168.139.1]'
Data: 'mail FROM:<sender@example.com>'
===> MAIL FROM:<sender@example.com>
sender: sender@example.com
Data: 'rcpt TO:<user@example.com>'
===> RCPT TO:<user@example.com>
recips: ['user@example.com']
Data: 'data'
Data: "From: sender@example.com\r\nTo: user@example.com\r\nSubject: Hello!\r\n\r\nThis message was sent with Python's smtplib."
---------- MESSAGE FOLLOWS ----------
From: sender@example.com
To: user@example.com
Subject: Hello!
X-Peer: 192.168.139.1

This message was sent with Python's smtplib.
------------ END MESSAGE ------------
Data: 'quit'

Implicit TLS via smtp port 465:

#> python -m smtpd_tls --debug -c DebuggingServer --tls --keyfile=../server.pem 0.0.0.0:465
DebuggingServer started at Thu Feb  4 17:00:53 2016
        Local addr: ('0.0.0.0', 465)
        Remote addr:('mail.somehost.com', 25)
        TLS Mode: implicit (encrypted from the beginning)
        TLS Context: <ssl.SSLContext object at 0x7fee6ec36bb0>
Incoming connection from ('192.168.139.1', 40028)
Peer: ('192.168.139.1', 40028) - negotiated TLS: ('ECDHE-RSA-AES256-GCM-SHA384', 'TLSv1/SSLv3', 256)
Peer: ('192.168.139.1', 40028)
Data: 'ehlo [192.168.139.1]'
Data: 'mail FROM:<sender@example.com>'
===> MAIL FROM:<sender@example.com>
sender: sender@example.com
Data: 'rcpt TO:<user@example.com>'
===> RCPT TO:<user@example.com>
recips: ['user@example.com']
Data: 'data'
Data: "From: sender@example.com\r\nTo: user@example.com\r\nSubject: Hello!\r\n\r\nThis message was sent with Python's smtplib."
---------- MESSAGE FOLLOWS ----------
From: sender@example.com
To: user@example.com
Subject: Hello!
X-Peer: 192.168.139.1

This message was sent with Python's smtplib.
------------ END MESSAGE ------------
Data: 'quit'

Project details


Release history Release notifications | RSS feed

This version

0.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smtpd-tls-0.1.tar.gz (6.1 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page