Fail-safe email sending

By default if SMTP server rejects the message sent by PloneFormGen the page will crash with an exception. Possible reasons for SMTP failure are

  • SMTP server is down

  • SMTP server is overloaded

  • SMTP server spam protection is giving false positives for your email sending attempts

If you have a situation where gathering the data is critical, the following process is appropriate:

  • Use save data adapter to save results

  • Use a custom email sender script adapter to send email and even if this step fails then the data is saved and no exception is given to the user

Example PloneFormGen script adapter (using proxy role Manager):

# -*- coding: utf-8 -*-
from Products.CMFCore.utils import getToolByName

# This script will send email to several recipients
# each written down to its own email field
# whose id starts with "email-"
emails = []

for key in fields:
  if key.startswith('email-'):
    if fields[key] != '':
      emails.append(fields[key])


mailhost = getToolByName(ploneformgen, 'MailHost')

subject = "Huuhaa"

# Custom message with a name filled in
message = u"""Hello,

Thanks for participating %s !
Cheers,
http://www.opensourcehacker.com
""" % (fields['etunimi'])

source = "info@opensourcehacker.com"

for email in emails:
  try:
    mailhost.send(message, email, source, subject=subject, charset="utf-8", )
  except Exception:
    pass