old_contents: from email import Encoders
  from email.mime.base import MIMEBase
  from email.mime.multipart import MIMEMultipart
  from email.mime.text import MIMEText
  from email.utils import COMMASPACE, formatdate
  from flask import current_app
  import logging
  from os.path import basename
  import smtplib
  
  
  log = logging.getLogger('rhizi')
  
  def send_email_message(recipients, subject, body, attachments=[]):
  
      send_from = current_app.rz_config.mail_default_sender
      smtp_hostname = current_app.rz_config.mail_hostname
  
      send_message_helper(smtp_hostname=smtp_hostname,
                          send_from=send_from, recipients=recipients,
                          subject=subject, attachments=attachments, body=body)
  
      log.info('email sent: recipients: %s: subject: %s, attachment-count: %d' % (recipients, subject, len(attachments)))
  
  def send_message_helper(smtp_hostname, send_from, recipients, subject, attachments, body):
      """
      attachments is a list of tuples (filename, mimetype, data)
  
      note: helper exists for ease of testing, since it doesn't use flask only
      python batteries-included packages
      """
      assert isinstance(recipients, list)
  
      msg = MIMEMultipart()
      msg['From'] = send_from
      msg['To'] = COMMASPACE.join(recipients)
      msg['Date'] = formatdate(localtime=True)
      msg['Subject'] = subject
      msg.attach(MIMEText(body))
  
      for filename, mimetype, data in attachments:
          maintype, subtype = mimetype.split('/')
          part = MIMEBase(maintype, subtype)
          part.set_payload(data)
          Encoders.encode_base64(part)
          part.add_header('Content-Disposition', 'attachment', filename=filename)
          # Content_Disposition: attachment; filename="feedback_page.html"
          msg.attach(part)
  
      smtp = smtplib.SMTP(smtp_hostname)
      smtp.sendmail(send_from, recipients, msg.as_string())
      smtp.close()
  
  if __name__ == '__main__':
      # FIXME - move to actual test suite
      send_message_helper('localhost', 'alon@localhost', ['alon@localhost'], 'test subject', [
          ('diary.txt', 'text/plain', "bla bla bla yeah that's right bla")], 'this is it pal')
  
new_contents: from email import Encoders
  from email.mime.base import MIMEBase
  from email.mime.multipart import MIMEMultipart
  from email.mime.text import MIMEText
  from email.utils import COMMASPACE, formatdate
  from flask import current_app
  import logging
  from os.path import basename
  import smtplib
  
  
  log = logging.getLogger('rhizi')
  
  def send_email_message(recipients, subject, body, attachments=[]):
  
      send_from = current_app.rz_config.mail_default_sender
      smtp_hostname = current_app.rz_config.mail_hostname
  
      send_message_helper(smtp_hostname=smtp_hostname,
                          send_from=send_from, recipients=recipients,
                          subject=subject, attachments=attachments, body=body)
  
      log.info('email sent: recipients: %s: subject: %s, attachment-count: %d' % (recipients, subject, len(attachments)))
  
  def send_message_helper(smtp_hostname, send_from, recipients, subject, attachments, body):
      """
      attachments is a list of tuples (filename, mimetype, data)
  
      note: helper exists for ease of testing, since it doesn't use flask only
      python batteries-included packages
      """
      assert isinstance(recipients, list)
  
      msg = MIMEMultipart('utf-8')
      msg['From'] = send_from
      msg['To'] = COMMASPACE.join(recipients)
      msg['Date'] = formatdate(localtime=True)
      msg['Subject'] = subject
      msg.attach(MIMEText(body, _charset='utf-8'))
  
      for filename, mimetype, data in attachments:
          maintype, subtype = mimetype.split('/')
          part = MIMEBase(maintype, subtype)
          part.set_payload(data)
          Encoders.encode_base64(part)
          part.add_header('Content-Disposition', 'attachment', filename=filename)
          # Content_Disposition: attachment; filename="feedback_page.html"
          msg.attach(part)
  
      smtp = smtplib.SMTP(smtp_hostname)
      smtp.sendmail(send_from, recipients, msg.as_string())
      smtp.close()
  
  if __name__ == '__main__':
      # FIXME - move to actual test suite
      send_message_helper('localhost', 'alon@localhost', ['alon@localhost'], 'test subject', [
          ('diary.txt', 'text/plain', "bla bla bla yeah that's right bla")], 'this is it pal')
  
subject: allow feedback comment to be utf-8