The SMTP Extension provides the ability for applications to send email based on the smtplib standard library.


  • No external depencies


This extension honors the following configuration settings:

  • to - Default to addresses (list, or comma separated depending on the ConfigHandler in use)
  • from_addr - Default from_addr address
  • cc - Default cc addresses (list, or comma separated depending on the ConfigHandler in use)
  • bcc - Default bcc addresses (list, or comma separated depending on the ConfigHandler in use)
  • subject - Default subject
  • subject_prefix - Additional string to prepend to the subject
  • host - The SMTP host server
  • port - The SMTP host server port
  • timeout - The timeout in seconds before terminating a connection
  • ssl - Whether to initiate SSL or not
  • tls - Whether to use TLS or not (requires SSL)
  • auth - Whether or not to initiate SMTP authentication
  • username - SMTP authentication username
  • password - SMTP authentication password

You can add these to any application configuration file under a [mail.smtp] section, for example:



# set the mail handler to use
mail_handler = smtp


# default to addresses (comma separated list)
to = me@example.com

# default from address
from = someone_else@example.com

# default cc addresses (comma separated list)
cc = jane@example.com, rita@example.com

# default bcc addresses (comma separated list)
bcc = blackhole@example.com, someone_else@example.com

# default subject
subject = This is The Default Subject

# additional prefix to prepend to the subject
subject_prefix = MY PREFIX >

# smtp host server
host = localhost

# smtp host port
port = 465

# timeout in seconds
timeout = 30

# whether or not to establish an ssl connection
ssl = 1

# whether or not to use start tls
tls = 1

# whether or not to initiate smtp auth
auth = 1

# smtp auth username
username = john.doe

# smtp auth password
password = oober_secure_password


class MyApp(CementApp):
    class Meta:
        label = 'myapp'
        mail_handler = 'smtp'

with MyApp() as app:
    app.mail.send('This is my fake message',
        subject='This is my subject',
        to=['john@example.com', 'rita@example.com'],
class cement.ext.ext_smtp.SMTPMailHandler(*args, **kw)

Bases: cement.core.mail.CementMailHandler

This class implements the IMail interface, and is based on the smtplib standard library.

class Meta

Bases: object

Handler meta-data.

config_defaults = {'password': None, 'host': 'localhost', 'username': None, 'tls': False, 'port': '25', 'ssl': False, 'auth': False, 'subject': None, 'bcc': [], 'cc': [], 'timeout': 30, 'subject_prefix': None, 'from_addr': 'noreply@localhost', 'to': []}

Configuration default values

label = 'smtp'

Unique identifier for this handler

SMTPMailHandler.send(body, **kw)

Send an email message via SMTP. Keyword arguments override configuration defaults (cc, bcc, etc).

  • body (multiline string) – The message body to send
  • to (list) – List of recipients (generally email addresses)
  • from_addr (str) – Address (generally email) of the sender
  • cc (list) – List of CC Recipients
  • bcc (list) – List of BCC Recipients
  • subject (str) – Message subject line

Boolean (True if message is sent successfully, False otherwise)


# Using all configuration defaults
app.mail.send('This is my message body')

# Overriding configuration defaults
app.mail.send('My message body'
    cc=['jane@example.com', 'rita@example.com'],
    subject='This is my subject',