|
@@ -1,14 +1,14 @@
|
|
|
==============
|
|
|
-Sending e-mail
|
|
|
+Sending email
|
|
|
==============
|
|
|
|
|
|
.. module:: django.core.mail
|
|
|
- :synopsis: Helpers to easily send e-mail.
|
|
|
+ :synopsis: Helpers to easily send email.
|
|
|
|
|
|
-Although Python makes sending e-mail relatively easy via the `smtplib
|
|
|
+Although Python makes sending email relatively easy via the `smtplib
|
|
|
library`_, Django provides a couple of light wrappers over it. These wrappers
|
|
|
-are provided to make sending e-mail extra quick, to make it easy to test
|
|
|
-e-mail sending during development, and to provide support for platforms that
|
|
|
+are provided to make sending email extra quick, to make it easy to test
|
|
|
+email sending during development, and to provide support for platforms that
|
|
|
can't use SMTP.
|
|
|
|
|
|
The code lives in the ``django.core.mail`` module.
|
|
@@ -33,7 +33,7 @@ set, are used to authenticate to the SMTP server, and the
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
- The character set of e-mail sent with ``django.core.mail`` will be set to
|
|
|
+ The character set of email sent with ``django.core.mail`` will be set to
|
|
|
the value of your :setting:`DEFAULT_CHARSET` setting.
|
|
|
|
|
|
send_mail()
|
|
@@ -41,7 +41,7 @@ send_mail()
|
|
|
|
|
|
.. function:: send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None, connection=None)
|
|
|
|
|
|
-The simplest way to send e-mail is using
|
|
|
+The simplest way to send email is using
|
|
|
``django.core.mail.send_mail()``.
|
|
|
|
|
|
The ``subject``, ``message``, ``from_email`` and ``recipient_list`` parameters
|
|
@@ -50,9 +50,9 @@ are required.
|
|
|
* ``subject``: A string.
|
|
|
* ``message``: A string.
|
|
|
* ``from_email``: A string.
|
|
|
- * ``recipient_list``: A list of strings, each an e-mail address. Each
|
|
|
+ * ``recipient_list``: A list of strings, each an email address. Each
|
|
|
member of ``recipient_list`` will see the other recipients in the "To:"
|
|
|
- field of the e-mail message.
|
|
|
+ field of the email message.
|
|
|
* ``fail_silently``: A boolean. If it's ``False``, ``send_mail`` will raise
|
|
|
an ``smtplib.SMTPException``. See the `smtplib docs`_ for a list of
|
|
|
possible exceptions, all of which are subclasses of ``SMTPException``.
|
|
@@ -62,9 +62,9 @@ are required.
|
|
|
* ``auth_password``: The optional password to use to authenticate to the
|
|
|
SMTP server. If this isn't provided, Django will use the value of the
|
|
|
:setting:`EMAIL_HOST_PASSWORD` setting.
|
|
|
- * ``connection``: The optional e-mail backend to use to send the mail.
|
|
|
+ * ``connection``: The optional email backend to use to send the mail.
|
|
|
If unspecified, an instance of the default backend will be used.
|
|
|
- See the documentation on :ref:`E-mail backends <topic-email-backends>`
|
|
|
+ See the documentation on :ref:`Email backends <topic-email-backends>`
|
|
|
for more details.
|
|
|
|
|
|
.. _smtplib docs: http://docs.python.org/library/smtplib.html
|
|
@@ -74,7 +74,7 @@ send_mass_mail()
|
|
|
|
|
|
.. function:: send_mass_mail(datatuple, fail_silently=False, auth_user=None, auth_password=None, connection=None)
|
|
|
|
|
|
-``django.core.mail.send_mass_mail()`` is intended to handle mass e-mailing.
|
|
|
+``django.core.mail.send_mass_mail()`` is intended to handle mass emailing.
|
|
|
|
|
|
``datatuple`` is a tuple in which each element is in this format::
|
|
|
|
|
@@ -83,9 +83,9 @@ send_mass_mail()
|
|
|
``fail_silently``, ``auth_user`` and ``auth_password`` have the same functions
|
|
|
as in :meth:`~django.core.mail.send_mail()`.
|
|
|
|
|
|
-Each separate element of ``datatuple`` results in a separate e-mail message.
|
|
|
+Each separate element of ``datatuple`` results in a separate email message.
|
|
|
As in :meth:`~django.core.mail.send_mail()`, recipients in the same
|
|
|
-``recipient_list`` will all see the other addresses in the e-mail messages'
|
|
|
+``recipient_list`` will all see the other addresses in the email messages'
|
|
|
"To:" field.
|
|
|
|
|
|
For example, the following code would send two different messages to
|
|
@@ -111,21 +111,21 @@ mail_admins()
|
|
|
|
|
|
.. function:: mail_admins(subject, message, fail_silently=False, connection=None, html_message=None)
|
|
|
|
|
|
-``django.core.mail.mail_admins()`` is a shortcut for sending an e-mail to the
|
|
|
+``django.core.mail.mail_admins()`` is a shortcut for sending an email to the
|
|
|
site admins, as defined in the :setting:`ADMINS` setting.
|
|
|
|
|
|
``mail_admins()`` prefixes the subject with the value of the
|
|
|
:setting:`EMAIL_SUBJECT_PREFIX` setting, which is ``"[Django] "`` by default.
|
|
|
|
|
|
-The "From:" header of the e-mail will be the value of the
|
|
|
+The "From:" header of the email will be the value of the
|
|
|
:setting:`SERVER_EMAIL` setting.
|
|
|
|
|
|
This method exists for convenience and readability.
|
|
|
|
|
|
.. versionchanged:: 1.3
|
|
|
|
|
|
-If ``html_message`` is provided, the resulting e-mail will be a
|
|
|
-multipart/alternative e-mail with ``message`` as the "text/plain"
|
|
|
+If ``html_message`` is provided, the resulting email will be a
|
|
|
+multipart/alternative email with ``message`` as the "text/plain"
|
|
|
content type and ``html_message`` as the "text/html" content type.
|
|
|
|
|
|
mail_managers()
|
|
@@ -134,20 +134,20 @@ mail_managers()
|
|
|
.. function:: mail_managers(subject, message, fail_silently=False, connection=None, html_message=None)
|
|
|
|
|
|
``django.core.mail.mail_managers()`` is just like ``mail_admins()``, except it
|
|
|
-sends an e-mail to the site managers, as defined in the :setting:`MANAGERS`
|
|
|
+sends an email to the site managers, as defined in the :setting:`MANAGERS`
|
|
|
setting.
|
|
|
|
|
|
Examples
|
|
|
========
|
|
|
|
|
|
-This sends a single e-mail to john@example.com and jane@example.com, with them
|
|
|
+This sends a single email to john@example.com and jane@example.com, with them
|
|
|
both appearing in the "To:"::
|
|
|
|
|
|
send_mail('Subject', 'Message.', 'from@example.com',
|
|
|
['john@example.com', 'jane@example.com'])
|
|
|
|
|
|
This sends a message to john@example.com and jane@example.com, with them both
|
|
|
-receiving a separate e-mail::
|
|
|
+receiving a separate email::
|
|
|
|
|
|
datatuple = (
|
|
|
('Subject', 'Message.', 'from@example.com', ['john@example.com']),
|
|
@@ -159,19 +159,19 @@ Preventing header injection
|
|
|
===========================
|
|
|
|
|
|
`Header injection`_ is a security exploit in which an attacker inserts extra
|
|
|
-e-mail headers to control the "To:" and "From:" in e-mail messages that your
|
|
|
+email headers to control the "To:" and "From:" in email messages that your
|
|
|
scripts generate.
|
|
|
|
|
|
-The Django e-mail functions outlined above all protect against header injection
|
|
|
+The Django email functions outlined above all protect against header injection
|
|
|
by forbidding newlines in header values. If any ``subject``, ``from_email`` or
|
|
|
``recipient_list`` contains a newline (in either Unix, Windows or Mac style),
|
|
|
-the e-mail function (e.g. :meth:`~django.core.mail.send_mail()`) will raise
|
|
|
+the email function (e.g. :meth:`~django.core.mail.send_mail()`) will raise
|
|
|
``django.core.mail.BadHeaderError`` (a subclass of ``ValueError``) and, hence,
|
|
|
-will not send the e-mail. It's your responsibility to validate all data before
|
|
|
-passing it to the e-mail functions.
|
|
|
+will not send the email. It's your responsibility to validate all data before
|
|
|
+passing it to the email functions.
|
|
|
|
|
|
If a ``message`` contains headers at the start of the string, the headers will
|
|
|
-simply be printed as the first bit of the e-mail message.
|
|
|
+simply be printed as the first bit of the email message.
|
|
|
|
|
|
Here's an example view that takes a ``subject``, ``message`` and ``from_email``
|
|
|
from the request's POST data, sends that to admin@example.com and redirects to
|
|
@@ -208,24 +208,24 @@ wrappers that make use of the :class:`~django.core.mail.EmailMessage` class.
|
|
|
Not all features of the :class:`~django.core.mail.EmailMessage` class are
|
|
|
available through the :meth:`~django.core.mail.send_mail()` and related
|
|
|
wrapper functions. If you wish to use advanced features, such as BCC'ed
|
|
|
-recipients, file attachments, or multi-part e-mail, you'll need to create
|
|
|
+recipients, file attachments, or multi-part email, you'll need to create
|
|
|
:class:`~django.core.mail.EmailMessage` instances directly.
|
|
|
|
|
|
.. note::
|
|
|
This is a design feature. :meth:`~django.core.mail.send_mail()` and
|
|
|
related functions were originally the only interface Django provided.
|
|
|
However, the list of parameters they accepted was slowly growing over
|
|
|
- time. It made sense to move to a more object-oriented design for e-mail
|
|
|
+ time. It made sense to move to a more object-oriented design for email
|
|
|
messages and retain the original functions only for backwards
|
|
|
compatibility.
|
|
|
|
|
|
-:class:`~django.core.mail.EmailMessage` is responsible for creating the e-mail
|
|
|
-message itself. The :ref:`e-mail backend <topic-email-backends>` is then
|
|
|
-responsible for sending the e-mail.
|
|
|
+:class:`~django.core.mail.EmailMessage` is responsible for creating the email
|
|
|
+message itself. The :ref:`email backend <topic-email-backends>` is then
|
|
|
+responsible for sending the email.
|
|
|
|
|
|
For convenience, :class:`~django.core.mail.EmailMessage` provides a simple
|
|
|
-``send()`` method for sending a single e-mail. If you need to send multiple
|
|
|
-messages, the e-mail backend API :ref:`provides an alternative
|
|
|
+``send()`` method for sending a single email. If you need to send multiple
|
|
|
+messages, the email backend API :ref:`provides an alternative
|
|
|
<topics-sending-multiple-emails>`.
|
|
|
|
|
|
EmailMessage Objects
|
|
@@ -241,7 +241,7 @@ All parameters are optional and can be set at any time prior to calling the
|
|
|
.. versionchanged:: 1.3
|
|
|
The ``cc`` argument was added.
|
|
|
|
|
|
- * ``subject``: The subject line of the e-mail.
|
|
|
+ * ``subject``: The subject line of the email.
|
|
|
|
|
|
* ``body``: The body text. This should be a plain text message.
|
|
|
|
|
@@ -252,9 +252,9 @@ All parameters are optional and can be set at any time prior to calling the
|
|
|
* ``to``: A list or tuple of recipient addresses.
|
|
|
|
|
|
* ``bcc``: A list or tuple of addresses used in the "Bcc" header when
|
|
|
- sending the e-mail.
|
|
|
+ sending the email.
|
|
|
|
|
|
- * ``connection``: An e-mail backend instance. Use this parameter if
|
|
|
+ * ``connection``: An email backend instance. Use this parameter if
|
|
|
you want to use the same connection for multiple messages. If omitted, a
|
|
|
new connection is created when ``send()`` is called.
|
|
|
|
|
@@ -265,10 +265,10 @@ All parameters are optional and can be set at any time prior to calling the
|
|
|
* ``headers``: A dictionary of extra headers to put on the message. The
|
|
|
keys are the header name, values are the header values. It's up to the
|
|
|
caller to ensure header names and values are in the correct format for
|
|
|
- an e-mail message.
|
|
|
+ an email message.
|
|
|
|
|
|
* ``cc``: A list or tuple of recipient addresses used in the "Cc" header
|
|
|
- when sending the e-mail.
|
|
|
+ when sending the email.
|
|
|
|
|
|
For example::
|
|
|
|
|
@@ -279,7 +279,7 @@ For example::
|
|
|
The class has the following methods:
|
|
|
|
|
|
* ``send(fail_silently=False)`` sends the message. If a connection was
|
|
|
- specified when the e-mail was constructed, that connection will be used.
|
|
|
+ specified when the email was constructed, that connection will be used.
|
|
|
Otherwise, an instance of the default backend will be instantiated and
|
|
|
used. If the keyword argument ``fail_silently`` is ``True``, exceptions
|
|
|
raised while sending the message will be quashed.
|
|
@@ -307,7 +307,7 @@ The class has the following methods:
|
|
|
|
|
|
* Alternatively, you can pass ``attach()`` three arguments:
|
|
|
``filename``, ``content`` and ``mimetype``. ``filename`` is the name
|
|
|
- of the file attachment as it will appear in the e-mail, ``content`` is
|
|
|
+ of the file attachment as it will appear in the email, ``content`` is
|
|
|
the data that will be contained inside the attachment and
|
|
|
``mimetype`` is the optional MIME type for the attachment. If you
|
|
|
omit ``mimetype``, the MIME content type will be guessed from the
|
|
@@ -329,12 +329,12 @@ The class has the following methods:
|
|
|
Sending alternative content types
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
-It can be useful to include multiple versions of the content in an e-mail; the
|
|
|
+It can be useful to include multiple versions of the content in an email; the
|
|
|
classic example is to send both text and HTML versions of a message. With
|
|
|
-Django's e-mail library, you can do this using the ``EmailMultiAlternatives``
|
|
|
+Django's email library, you can do this using the ``EmailMultiAlternatives``
|
|
|
class. This subclass of :class:`~django.core.mail.EmailMessage` has an
|
|
|
``attach_alternative()`` method for including extra versions of the message
|
|
|
-body in the e-mail. All the other methods (including the class initialization)
|
|
|
+body in the email. All the other methods (including the class initialization)
|
|
|
are inherited directly from :class:`~django.core.mail.EmailMessage`.
|
|
|
|
|
|
To send a text and HTML combination, you could write::
|
|
@@ -351,7 +351,7 @@ To send a text and HTML combination, you could write::
|
|
|
By default, the MIME type of the ``body`` parameter in an
|
|
|
:class:`~django.core.mail.EmailMessage` is ``"text/plain"``. It is good
|
|
|
practice to leave this alone, because it guarantees that any recipient will be
|
|
|
-able to read the e-mail, regardless of their mail client. However, if you are
|
|
|
+able to read the email, regardless of their mail client. However, if you are
|
|
|
confident that your recipients can handle an alternative content type, you can
|
|
|
use the ``content_subtype`` attribute on the
|
|
|
:class:`~django.core.mail.EmailMessage` class to change the main content type.
|
|
@@ -369,13 +369,13 @@ E-Mail Backends
|
|
|
|
|
|
.. versionadded:: 1.2
|
|
|
|
|
|
-The actual sending of an e-mail is handled by the e-mail backend.
|
|
|
+The actual sending of an email is handled by the email backend.
|
|
|
|
|
|
-The e-mail backend class has the following methods:
|
|
|
+The email backend class has the following methods:
|
|
|
|
|
|
- * ``open()`` instantiates an long-lived e-mail-sending connection.
|
|
|
+ * ``open()`` instantiates an long-lived email-sending connection.
|
|
|
|
|
|
- * ``close()`` closes the current e-mail-sending connection.
|
|
|
+ * ``close()`` closes the current email-sending connection.
|
|
|
|
|
|
* ``send_messages(email_messages)`` sends a list of
|
|
|
:class:`~django.core.mail.EmailMessage` objects. If the connection is
|
|
@@ -383,38 +383,38 @@ The e-mail backend class has the following methods:
|
|
|
connection afterwards. If the connection is already open, it will be
|
|
|
left open after mail has been sent.
|
|
|
|
|
|
-Obtaining an instance of an e-mail backend
|
|
|
+Obtaining an instance of an email backend
|
|
|
------------------------------------------
|
|
|
|
|
|
The :meth:`get_connection` function in ``django.core.mail`` returns an
|
|
|
-instance of the e-mail backend that you can use.
|
|
|
+instance of the email backend that you can use.
|
|
|
|
|
|
.. currentmodule:: django.core.mail
|
|
|
|
|
|
.. function:: get_connection(backend=None, fail_silently=False, *args, **kwargs)
|
|
|
|
|
|
By default, a call to ``get_connection()`` will return an instance of the
|
|
|
-e-mail backend specified in :setting:`EMAIL_BACKEND`. If you specify the
|
|
|
+email backend specified in :setting:`EMAIL_BACKEND`. If you specify the
|
|
|
``backend`` argument, an instance of that backend will be instantiated.
|
|
|
|
|
|
The ``fail_silently`` argument controls how the backend should handle errors.
|
|
|
-If ``fail_silently`` is True, exceptions during the e-mail sending process
|
|
|
+If ``fail_silently`` is True, exceptions during the email sending process
|
|
|
will be silently ignored.
|
|
|
|
|
|
All other arguments are passed directly to the constructor of the
|
|
|
-e-mail backend.
|
|
|
+email backend.
|
|
|
|
|
|
-Django ships with several e-mail sending backends. With the exception of the
|
|
|
+Django ships with several email sending backends. With the exception of the
|
|
|
SMTP backend (which is the default), these backends are only useful during
|
|
|
-testing and development. If you have special e-mail sending requirements, you
|
|
|
-can :ref:`write your own e-mail backend <topic-custom-email-backend>`.
|
|
|
+testing and development. If you have special email sending requirements, you
|
|
|
+can :ref:`write your own email backend <topic-custom-email-backend>`.
|
|
|
|
|
|
.. _topic-email-smtp-backend:
|
|
|
|
|
|
SMTP backend
|
|
|
~~~~~~~~~~~~
|
|
|
|
|
|
-This is the default backend. E-mail will be sent through a SMTP server.
|
|
|
+This is the default backend. Email will be sent through a SMTP server.
|
|
|
The server address and authentication credentials are set in the
|
|
|
:setting:`EMAIL_HOST`, :setting:`EMAIL_PORT`, :setting:`EMAIL_HOST_USER`,
|
|
|
:setting:`EMAIL_HOST_PASSWORD` and :setting:`EMAIL_USE_TLS` settings in your
|
|
@@ -429,8 +429,8 @@ want to specify it explicitly, put the following in your settings::
|
|
|
|
|
|
Prior to version 1.2, Django provided a
|
|
|
:class:`~django.core.mail.SMTPConnection` class. This class provided a way
|
|
|
- to directly control the use of SMTP to send e-mail. This class has been
|
|
|
- deprecated in favor of the generic e-mail backend API.
|
|
|
+ to directly control the use of SMTP to send email. This class has been
|
|
|
+ deprecated in favor of the generic email backend API.
|
|
|
|
|
|
For backwards compatibility :class:`~django.core.mail.SMTPConnection` is
|
|
|
still available in ``django.core.mail`` as an alias for the SMTP backend.
|
|
@@ -441,8 +441,8 @@ want to specify it explicitly, put the following in your settings::
|
|
|
Console backend
|
|
|
~~~~~~~~~~~~~~~
|
|
|
|
|
|
-Instead of sending out real e-mails the console backend just writes the
|
|
|
-e-mails that would be send to the standard output. By default, the console
|
|
|
+Instead of sending out real emails the console backend just writes the
|
|
|
+emails that would be send to the standard output. By default, the console
|
|
|
backend writes to ``stdout``. You can use a different stream-like object by
|
|
|
providing the ``stream`` keyword argument when constructing the connection.
|
|
|
|
|
@@ -458,7 +458,7 @@ convenience that can be used during development.
|
|
|
File backend
|
|
|
~~~~~~~~~~~~
|
|
|
|
|
|
-The file backend writes e-mails to a file. A new file is created for each new
|
|
|
+The file backend writes emails to a file. A new file is created for each new
|
|
|
session that is opened on this backend. The directory to which the files are
|
|
|
written is either taken from the :setting:`EMAIL_FILE_PATH` setting or from
|
|
|
the ``file_path`` keyword when creating a connection with
|
|
@@ -505,15 +505,15 @@ convenience that can be used during development.
|
|
|
|
|
|
.. _topic-custom-email-backend:
|
|
|
|
|
|
-Defining a custom e-mail backend
|
|
|
+Defining a custom email backend
|
|
|
--------------------------------
|
|
|
|
|
|
-If you need to change how e-mails are sent you can write your own e-mail
|
|
|
+If you need to change how emails are sent you can write your own email
|
|
|
backend. The ``EMAIL_BACKEND`` setting in your settings file is then the
|
|
|
Python import path for your backend class.
|
|
|
|
|
|
-Custom e-mail backends should subclass ``BaseEmailBackend`` that is located in
|
|
|
-the ``django.core.mail.backends.base`` module. A custom e-mail backend must
|
|
|
+Custom email backends should subclass ``BaseEmailBackend`` that is located in
|
|
|
+the ``django.core.mail.backends.base`` module. A custom email backend must
|
|
|
implement the ``send_messages(email_messages)`` method. This method receives a
|
|
|
list of :class:`~django.core.mail.EmailMessage` instances and returns the
|
|
|
number of successfully delivered messages. If your backend has any concept of
|
|
@@ -523,15 +523,15 @@ implementation.
|
|
|
|
|
|
.. _topics-sending-multiple-emails:
|
|
|
|
|
|
-Sending multiple e-mails
|
|
|
+Sending multiple emails
|
|
|
------------------------
|
|
|
|
|
|
Establishing and closing an SMTP connection (or any other network connection,
|
|
|
-for that matter) is an expensive process. If you have a lot of e-mails to send,
|
|
|
+for that matter) is an expensive process. If you have a lot of emails to send,
|
|
|
it makes sense to reuse an SMTP connection, rather than creating and
|
|
|
-destroying a connection every time you want to send an e-mail.
|
|
|
+destroying a connection every time you want to send an email.
|
|
|
|
|
|
-There are two ways you tell an e-mail backend to reuse a connection.
|
|
|
+There are two ways you tell an email backend to reuse a connection.
|
|
|
|
|
|
Firstly, you can use the ``send_messages()`` method. ``send_messages()`` takes
|
|
|
a list of :class:`~django.core.mail.EmailMessage` instances (or subclasses),
|
|
@@ -539,11 +539,11 @@ and sends them all using a single connection.
|
|
|
|
|
|
For example, if you have a function called ``get_notification_email()`` that
|
|
|
returns a list of :class:`~django.core.mail.EmailMessage` objects representing
|
|
|
-some periodic e-mail you wish to send out, you could send these e-mails using
|
|
|
+some periodic email you wish to send out, you could send these emails using
|
|
|
a single call to send_messages::
|
|
|
|
|
|
from django.core import mail
|
|
|
- connection = mail.get_connection() # Use default e-mail connection
|
|
|
+ connection = mail.get_connection() # Use default email connection
|
|
|
messages = get_notification_email()
|
|
|
connection.send_messages(messages)
|
|
|
|
|
@@ -551,7 +551,7 @@ In this example, the call to ``send_messages()`` opens a connection on the
|
|
|
backend, sends the list of messages, and then closes the connection again.
|
|
|
|
|
|
The second approach is to use the ``open()`` and ``close()`` methods on the
|
|
|
-e-mail backend to manually control the connection. ``send_messages()`` will not
|
|
|
+email backend to manually control the connection. ``send_messages()`` will not
|
|
|
manually open or close the connection if it is already open, so if you
|
|
|
manually open the connection, you can control when it is closed. For example::
|
|
|
|
|
@@ -561,10 +561,10 @@ manually open the connection, you can control when it is closed. For example::
|
|
|
# Manually open the connection
|
|
|
connection.open()
|
|
|
|
|
|
- # Construct an e-mail message that uses the connection
|
|
|
+ # Construct an email message that uses the connection
|
|
|
email1 = mail.EmailMessage('Hello', 'Body goes here', 'from@example.com',
|
|
|
['to1@example.com'], connection=connection)
|
|
|
- email1.send() # Send the e-mail
|
|
|
+ email1.send() # Send the email
|
|
|
|
|
|
# Construct two more messages
|
|
|
email2 = mail.EmailMessage('Hello', 'Body goes here', 'from@example.com',
|
|
@@ -572,42 +572,42 @@ manually open the connection, you can control when it is closed. For example::
|
|
|
email3 = mail.EmailMessage('Hello', 'Body goes here', 'from@example.com',
|
|
|
['to3@example.com'])
|
|
|
|
|
|
- # Send the two e-mails in a single call -
|
|
|
+ # Send the two emails in a single call -
|
|
|
connection.send_messages([email2, email3])
|
|
|
# The connection was already open so send_messages() doesn't close it.
|
|
|
# We need to manually close the connection.
|
|
|
connection.close()
|
|
|
|
|
|
|
|
|
-Testing e-mail sending
|
|
|
+Testing email sending
|
|
|
======================
|
|
|
|
|
|
-There are times when you do not want Django to send e-mails at
|
|
|
+There are times when you do not want Django to send emails at
|
|
|
all. For example, while developing a Web site, you probably don't want
|
|
|
-to send out thousands of e-mails -- but you may want to validate that
|
|
|
-e-mails will be sent to the right people under the right conditions,
|
|
|
-and that those e-mails will contain the correct content.
|
|
|
+to send out thousands of emails -- but you may want to validate that
|
|
|
+emails will be sent to the right people under the right conditions,
|
|
|
+and that those emails will contain the correct content.
|
|
|
|
|
|
-The easiest way to test your project's use of e-mail is to use the ``console``
|
|
|
-e-mail backend. This backend redirects all e-mail to stdout, allowing you to
|
|
|
+The easiest way to test your project's use of email is to use the ``console``
|
|
|
+email backend. This backend redirects all email to stdout, allowing you to
|
|
|
inspect the content of mail.
|
|
|
|
|
|
-The ``file`` e-mail backend can also be useful during development -- this backend
|
|
|
+The ``file`` email backend can also be useful during development -- this backend
|
|
|
dumps the contents of every SMTP connection to a file that can be inspected
|
|
|
at your leisure.
|
|
|
|
|
|
-Another approach is to use a "dumb" SMTP server that receives the e-mails
|
|
|
+Another approach is to use a "dumb" SMTP server that receives the emails
|
|
|
locally and displays them to the terminal, but does not actually send
|
|
|
anything. Python has a built-in way to accomplish this with a single command::
|
|
|
|
|
|
python -m smtpd -n -c DebuggingServer localhost:1025
|
|
|
|
|
|
This command will start a simple SMTP server listening on port 1025 of
|
|
|
-localhost. This server simply prints to standard output all e-mail headers and
|
|
|
-the e-mail body. You then only need to set the :setting:`EMAIL_HOST` and
|
|
|
+localhost. This server simply prints to standard output all email headers and
|
|
|
+the email body. You then only need to set the :setting:`EMAIL_HOST` and
|
|
|
:setting:`EMAIL_PORT` accordingly, and you are set.
|
|
|
|
|
|
-For a more detailed discussion of testing and processing of e-mails locally,
|
|
|
+For a more detailed discussion of testing and processing of emails locally,
|
|
|
see the Python documentation on the `SMTP Server`_.
|
|
|
|
|
|
.. _SMTP Server: http://docs.python.org/library/smtpd.html
|
|
@@ -619,7 +619,7 @@ SMTPConnection
|
|
|
|
|
|
.. deprecated:: 1.2
|
|
|
|
|
|
-The ``SMTPConnection`` class has been deprecated in favor of the generic e-mail
|
|
|
+The ``SMTPConnection`` class has been deprecated in favor of the generic email
|
|
|
backend API.
|
|
|
|
|
|
For backwards compatibility ``SMTPConnection`` is still available in
|