2009-11-03 20:53:26 +08:00
|
|
|
"""
|
|
|
|
Tools for sending email.
|
|
|
|
"""
|
2012-06-08 00:08:47 +08:00
|
|
|
from __future__ import unicode_literals
|
2009-11-03 20:53:26 +08:00
|
|
|
|
|
|
|
from django.conf import settings
|
2013-02-03 05:58:02 +08:00
|
|
|
from django.utils.module_loading import import_by_path
|
2009-11-03 20:53:26 +08:00
|
|
|
|
|
|
|
# Imported for backwards compatibility, and for the sake
|
|
|
|
# of a cleaner namespace. These symbols used to be in
|
|
|
|
# django/core/mail.py before the introduction of email
|
|
|
|
# backends and the subsequent reorganization (See #10355)
|
|
|
|
from django.core.mail.utils import CachedDnsName, DNS_NAME
|
2011-07-13 17:35:51 +08:00
|
|
|
from django.core.mail.message import (
|
|
|
|
EmailMessage, EmailMultiAlternatives,
|
|
|
|
SafeMIMEText, SafeMIMEMultipart,
|
|
|
|
DEFAULT_ATTACHMENT_MIME_TYPE, make_msgid,
|
|
|
|
BadHeaderError, forbid_multi_line_headers)
|
2011-09-11 05:00:25 +08:00
|
|
|
|
2013-10-18 19:25:30 +08:00
|
|
|
__all__ = [
|
|
|
|
'CachedDnsName', 'DNS_NAME', 'EmailMessage', 'EmailMultiAlternatives',
|
|
|
|
'SafeMIMEText', 'SafeMIMEMultipart', 'DEFAULT_ATTACHMENT_MIME_TYPE',
|
|
|
|
'make_msgid', 'BadHeaderError', 'forbid_multi_line_headers',
|
|
|
|
'get_connection', 'send_mail', 'send_mass_mail', 'mail_admins',
|
|
|
|
'mail_managers',
|
|
|
|
]
|
|
|
|
|
2009-11-03 20:53:26 +08:00
|
|
|
|
|
|
|
def get_connection(backend=None, fail_silently=False, **kwds):
|
2011-04-02 00:10:22 +08:00
|
|
|
"""Load an email backend and return an instance of it.
|
2009-11-03 20:53:26 +08:00
|
|
|
|
|
|
|
If backend is None (default) settings.EMAIL_BACKEND is used.
|
|
|
|
|
|
|
|
Both fail_silently and other keyword arguments are used in the
|
|
|
|
constructor of the backend.
|
|
|
|
"""
|
2013-02-03 05:58:02 +08:00
|
|
|
klass = import_by_path(backend or settings.EMAIL_BACKEND)
|
2010-01-04 20:05:04 +08:00
|
|
|
return klass(fail_silently=fail_silently, **kwds)
|
2009-11-03 20:53:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
def send_mail(subject, message, from_email, recipient_list,
|
|
|
|
fail_silently=False, auth_user=None, auth_password=None,
|
2013-07-28 23:11:04 +08:00
|
|
|
connection=None, html_message=None):
|
2009-11-03 20:53:26 +08:00
|
|
|
"""
|
|
|
|
Easy wrapper for sending a single message to a recipient list. All members
|
|
|
|
of the recipient list will see the other recipients in the 'To' field.
|
|
|
|
|
|
|
|
If auth_user is None, the EMAIL_HOST_USER setting is used.
|
|
|
|
If auth_password is None, the EMAIL_HOST_PASSWORD setting is used.
|
|
|
|
|
|
|
|
Note: The API for this method is frozen. New code wanting to extend the
|
|
|
|
functionality should use the EmailMessage class directly.
|
|
|
|
"""
|
|
|
|
connection = connection or get_connection(username=auth_user,
|
|
|
|
password=auth_password,
|
|
|
|
fail_silently=fail_silently)
|
2013-07-28 23:11:04 +08:00
|
|
|
mail = EmailMultiAlternatives(subject, message, from_email, recipient_list,
|
|
|
|
connection=connection)
|
|
|
|
if html_message:
|
|
|
|
mail.attach_alternative(html_message, 'text/html')
|
|
|
|
|
|
|
|
return mail.send()
|
2009-11-03 20:53:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
def send_mass_mail(datatuple, fail_silently=False, auth_user=None,
|
|
|
|
auth_password=None, connection=None):
|
|
|
|
"""
|
|
|
|
Given a datatuple of (subject, message, from_email, recipient_list), sends
|
2011-04-02 00:10:22 +08:00
|
|
|
each message to each recipient list. Returns the number of emails sent.
|
2009-11-03 20:53:26 +08:00
|
|
|
|
|
|
|
If from_email is None, the DEFAULT_FROM_EMAIL setting is used.
|
|
|
|
If auth_user and auth_password are set, they're used to log in.
|
|
|
|
If auth_user is None, the EMAIL_HOST_USER setting is used.
|
|
|
|
If auth_password is None, the EMAIL_HOST_PASSWORD setting is used.
|
|
|
|
|
|
|
|
Note: The API for this method is frozen. New code wanting to extend the
|
|
|
|
functionality should use the EmailMessage class directly.
|
|
|
|
"""
|
|
|
|
connection = connection or get_connection(username=auth_user,
|
|
|
|
password=auth_password,
|
|
|
|
fail_silently=fail_silently)
|
2012-03-30 02:53:27 +08:00
|
|
|
messages = [EmailMessage(subject, message, sender, recipient,
|
|
|
|
connection=connection)
|
2009-11-03 20:53:26 +08:00
|
|
|
for subject, message, sender, recipient in datatuple]
|
|
|
|
return connection.send_messages(messages)
|
|
|
|
|
|
|
|
|
2010-12-06 22:21:51 +08:00
|
|
|
def mail_admins(subject, message, fail_silently=False, connection=None,
|
|
|
|
html_message=None):
|
2009-11-03 20:53:26 +08:00
|
|
|
"""Sends a message to the admins, as defined by the ADMINS setting."""
|
|
|
|
if not settings.ADMINS:
|
|
|
|
return
|
2012-06-08 00:08:47 +08:00
|
|
|
mail = EmailMultiAlternatives('%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject),
|
2010-12-06 22:21:51 +08:00
|
|
|
message, settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS],
|
|
|
|
connection=connection)
|
|
|
|
if html_message:
|
|
|
|
mail.attach_alternative(html_message, 'text/html')
|
|
|
|
mail.send(fail_silently=fail_silently)
|
2009-11-03 20:53:26 +08:00
|
|
|
|
|
|
|
|
2010-12-06 22:21:51 +08:00
|
|
|
def mail_managers(subject, message, fail_silently=False, connection=None,
|
|
|
|
html_message=None):
|
2009-11-03 20:53:26 +08:00
|
|
|
"""Sends a message to the managers, as defined by the MANAGERS setting."""
|
|
|
|
if not settings.MANAGERS:
|
|
|
|
return
|
2012-06-08 00:08:47 +08:00
|
|
|
mail = EmailMultiAlternatives('%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject),
|
2010-12-06 22:21:51 +08:00
|
|
|
message, settings.SERVER_EMAIL, [a[1] for a in settings.MANAGERS],
|
|
|
|
connection=connection)
|
|
|
|
if html_message:
|
|
|
|
mail.attach_alternative(html_message, 'text/html')
|
|
|
|
mail.send(fail_silently=fail_silently)
|