Source code for fobi.contrib.plugins.form_handlers.mail.callbacks
from .....base import FormCallback, get_processed_form_data
from .....constants import CALLBACK_FORM_VALID
from .....helpers import safe_text
from .helpers import send_mail
from .mixins import MailHandlerMixin
from .settings import (
AUTO_MAIL_BODY,
AUTO_MAIL_FROM,
AUTO_MAIL_SUBJECT,
AUTO_MAIL_TO,
MULTI_EMAIL_FIELD_VALUE_SPLITTER,
)
__title__ = "fobi.contrib.plugins.form_handlers.mail.callbacks"
__author__ = "Artur Barseghyan <artur.barseghyan@gmail.com>"
__copyright__ = "2014-2019 Artur Barseghyan"
__license__ = "GPL 2.0/LGPL 2.1"
__all__ = ("AutoFormMail",)
[docs]class AutoFormMail(FormCallback, MailHandlerMixin):
"""Auto mail form entries.
Note, that this callback is not active. In order to activate it, you
should import the ``AutoFormMail`` and register it using the
callback register as follows.
>>> from fobi.base import form_callback_registry
>>> from fobi.contrib.plugins.form_handlers.mail.callbacks import (
>>> AutoFormMail
>>> )
>>> form_callback_registry.register(AutoFormMail)
"""
stage = CALLBACK_FORM_VALID
[docs] def callback(self, form_entry, request, form):
"""Callback.
:param form_entry:
:param request:
:param form:
:return:
"""
form_element_entries = form_entry.formelemententry_set.all()
base_url = self.get_base_url(request)
# Clean up the values, leave our content fields and empty values.
field_name_to_label_map, cleaned_data = get_processed_form_data(
form, form_element_entries
)
rendered_data = self.get_rendered_data(
cleaned_data, field_name_to_label_map, base_url
)
files = self._prepare_files(request, form)
self.send_email(rendered_data, files)
[docs] def send_email(self, rendered_data, files):
"""Send email.
Might be used in integration packages.
"""
# Handling more than one email address
if isinstance(AUTO_MAIL_TO, (list, tuple)):
to_email = AUTO_MAIL_TO
else:
# Assume that it's string
to_email = AUTO_MAIL_TO.split(MULTI_EMAIL_FIELD_VALUE_SPLITTER)
send_mail(
safe_text(AUTO_MAIL_SUBJECT),
"{0}\n\n{1}".format(
safe_text(AUTO_MAIL_BODY), "".join(rendered_data)
),
AUTO_MAIL_FROM,
to_email,
fail_silently=False,
attachments=files.values(),
)