# Sending e-mail

Although Python makes sending e-mails relatively easy via the smtplib library, Scrapy provides its own facility for sending e-mails which is very easy to use and it’s implemented using Twisted non-blocking IO, to avoid interfering with the non-blocking IO of the crawler. It also provides a simple API for sending attachments and it’s very easy to configure, with a few settings.

## Quick example

There are two ways to instantiate the mail sender. You can instantiate it using the standard constructor:

    from scrapy.mail import MailSender
    mailer = MailSender()

Or you can instantiate it passing a Scrapy settings object, which will respect the settings:

    mailer = MailSender.from_settings(settings)

And here is how to use it to send an e-mail (without attachments):

    mailer.send(to=["someone@example.com"], subject="Some subject", body="Some body", cc=["another@example.com"])

## MailSender class reference

MailSender is the preferred class to use for sending emails from Scrapy, as it uses Twisted non-blocking IO, like the rest of the framework.

class `scrapy.mail.``MailSender`(smtphost=None, mailfrom=None, smtpuser=None, smtppass=None, smtpport=None)

  Parameters:

  - smtphost (str or bytes) – the SMTP host to use for sending the emails. If omitted, the `MAIL_HOST` setting will be used.
  - mailfrom (str) – the address used to send emails (in the `From:` header). If omitted, the `MAIL_FROM` setting will be used.
  - smtpuser – the SMTP user. If omitted, the `MAIL_USER` setting will be used. If not given, no SMTP authentication will be performed.
  - smtppass (str or bytes) – the SMTP pass for authentication.
  - smtpport (int) – the SMTP port to connect to
  - smtptls (boolean) – enforce using SMTP STARTTLS
  - smtpssl (boolean) – enforce using a secure SSL connection

  classmethod `from_settings`(settings)

    Instantiate using a Scrapy settings object, which will respect these Scrapy settings.

    Parameters: | settings (`scrapy.settings.Settings` object) – the e-mail recipients

  `send`(to, subject, body, cc=None, attachs=(), mimetype='text/plain', charset=None)

    Send email to the given recipients.

    Parameters:

    - to (str or list of str) – the e-mail recipients
    - subject (str) – the subject of the e-mail
    - cc (str or list of str) – the e-mails to CC
    - body (str) – the e-mail body
    - attachs (iterable) – an iterable of tuples `(attach_name, mimetype, file_object)` where `attach_name` is a string with the name that will appear on the e-mail’s attachment, `mimetype` is the mimetype of the attachment and `file_object` is a readable file object with the contents of the attachment
    - mimetype (str) – the MIME type of the e-mail
    - charset (str) – the character encoding to use for the e-mail contents

## Mail settings

These settings define the default constructor values of the `MailSender` class, and can be used to configure e-mail notifications in your project without writing any code (for those extensions and code that uses `MailSender`).

### MAIL_FROM

Default: `'scrapy@localhost'`

Sender email to use (`From:` header) for sending emails.

### MAIL_HOST

Default: `'localhost'`

SMTP host to use for sending emails.

### MAIL_PORT

Default: `25`

SMTP port to use for sending emails.

### MAIL_USER

Default: `None`

User to use for SMTP authentication. If disabled no SMTP authentication will be performed.

### MAIL_PASS

Default: `None`

Password to use for SMTP authentication, along with `MAIL_USER`.

### MAIL_TLS

Default: `False`

Enforce using STARTTLS. STARTTLS is a way to take an existing insecure connection, and upgrade it to a secure connection using SSL/TLS.

### MAIL_SSL

Default: `False`

Enforce connecting using an SSL encrypted connection