Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Sending Authenticated Email

This is an analysis of what the work would be needed to enable CSF-based apps to send authenticated email.

...

Code Block
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host" value="outgoing.mit.edu"/>
  <property name="port" value="587"/>
  <property name="username" value="USERNAME"/>
  <property name="password" value="PASSWORD"/>
  <property name="javaMailProperties">
    <props>
      <prop key="mail.debug">true<>false</prop>
      <prop key="mail.smtp.auth">true</prop>
      <prop key="mail.smtp.starttls.enable">true</prop>
    </props>
  </property>
</bean>

These The username, password, port, and possibly host, property values should be externalized to a properties file. We can put these properties in machine.properties - apps should pick this up automatically. Only one copy of this props file per server.

Any app we need that needs to use this feature would need have to upgrade its version of CSF and be retested. Each app would also need to reviewed to make sure ist it uses "machine.properties" in its property configuration.

2.One Login Per Batch of Email Messages

One question - for a bulk email send, should the sequence be:

authenticate to server
DO FOR EACH MAIL MESSAGE
    send email message
END DO

or

DO FOR EACH MAIL MESSAGE
    authenticate to server
    send email message
END DO

we authenticate to the server for every single email message in the batch:

Code Block

DO FOR EACH MAIL MESSAGE
    authenticate to server    send email message
END DO

or just once for the batch:

Code Block

authenticate to serverDO FOR EACH MAIL MESSAGE
    send email message
END DO

My initial test with CSF does the formerMy initial test does the latter, I think. WTW seems to do the formerlatter.

The former latter seems better (only one login per batch rather than one login per message). To do this, the email service needs to change - in fact it may be better to change it anyway. In "batchSend", instead of:

Code Block

Get list of email events

...


DO FOR each email event

...


  create MimeMessagePreparator

...


  send message using MimeMessagePreparator

...


  update email event

...


END DO

do this:

Code Block

Get list of email events

...


DO FOR each email event

...


  create MimeMessagePreparator and store in list

...


END DO

...



send messages using list of MimeMessagePreparators

...


update email events

We would use the "batch" API of Spring's JavaMailSender API:

Code Block

send(MimeMessagePreparator[] mimeMessagePreparators)

instead of

Code Block

send(MimeMessagePreparator mimeMessagePreparator)

Summary

This change would mean:

  1. Modifications to csf-email (detailed above)
  2. Changes to common property files (i.e. machine.properties) on each server that hosts CSF web apps.
  3. Build & release of each web app that needs to use this feature.
  4. Retest of each rebuilt app.