You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ja...@apache.org on 2008/02/14 23:21:51 UTC
svn commit: r627894 -
/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/util/MailUtil.java
Author: jalkanen
Date: Thu Feb 14 14:21:51 2008
New Revision: 627894
URL: http://svn.apache.org/viewvc?rev=627894&view=rev
Log:
JSPWIKI-169: Allows now mail sender to be loaded from JNDI as well.
Modified:
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/util/MailUtil.java
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/util/MailUtil.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/util/MailUtil.java?rev=627894&r1=627893&r2=627894&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/util/MailUtil.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/util/MailUtil.java Thu Feb 14 14:21:51 2008
@@ -234,6 +234,7 @@
protected static final String PROP_MAIL_STARTTLS = "mail.smtp.starttls.enable";
+ private static String fromAddress = null;
/**
* Private constructor prevents instantiation.
*/
@@ -261,91 +262,99 @@
* @param to the receiver
* @param subject the subject line of the message
* @param content the contents of the mail message, as plain text
+ * @throws AddressException
+ * @throws MessagingException
*/
- public static void sendMessage( WikiEngine engine, String to, String subject, String content )
- throws AddressException, MessagingException
+ public static void sendMessage(WikiEngine engine, String to, String subject, String content)
+ throws AddressException, MessagingException
{
- String from = engine.getWikiProperties().getProperty( PROP_MAIL_SENDER, DEFAULT_SENDER ).trim();
- sendMessage( engine, to, from, subject, content );
+ Properties props = engine.getWikiProperties();
+ Session session = getMailSession(engine);
+ getSenderEmailAddress(session, props);
+
+ try
+ {
+ // Create and address the message
+ MimeMessage msg = new MimeMessage(session);
+ msg.setFrom(new InternetAddress(fromAddress));
+ msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
+ msg.setSubject(subject);
+ msg.setText(content, "UTF-8");
+ msg.setSentDate(new Date());
+
+ // Send and log it
+ Transport.send(msg);
+ if (log.isInfoEnabled())
+ {
+ log.info("Sent e-mail to=" + to + ", subject=\"" + subject + "\", jndi=" + (c_useJndi ? TRUE : FALSE));
+ }
+ }
+ catch (MessagingException e)
+ {
+ log.error(e);
+ throw e;
+ }
}
+
+ // --------- JavaMail Session Helper methods --------------------------------
/**
- * <p>Sends an e-mail to a specified receiver from a specified sender, using a
- * JavaMail Session supplied by a JNDI mail session factory (preferred) or
- * a locally initialized session based on properties in
- * <code>jspwiki.properties</code>. See the top-level JavaDoc for this
- * class for a description of required properties and their
- * default values.</p>
- * <p>The e-mail addresses used for the <code>to</code> and <code>from</code>
- * parameters must be in RFC822 format, as described in the JavaDoc for
- * {@link javax.mail.internet.InternetAddress} and more fully at
- * <a href="http://www.freesoft.org/CIE/RFC/822/index.htm">http://www.freesoft.org/CIE/RFC/822/index.htm</a>.
- * In other words, e-mail addresses should look like this:</p>
- * <blockquote><code>Snoop Dog <snoop.dog@shizzle.net><br/>
- * snoop.dog@shizzle.net</code></blockquote>
- * <p>Note that the first form allows a "friendly" user name to be supplied
- * in addition to the actual e-mail address.</p>
- *
- * @param engine the WikiEngine for the current wiki
- * @param to the receiver
- * @param from the address the email will be from
- * @param subject the subject line of the message
- * @param content the contents of the mail message, as plain text
+ * Gets the Sender's email address from JNDI Session if available, otherwise
+ * from the jspwiki.properties or lastly the default value.
+ * @param pSession <code>Session</code>
+ * @param pProperties <code>Properties</code>
+ * @return <code>String</code>
+ */
+ protected static String getSenderEmailAddress(Session pSession, Properties pProperties)
+ {
+ if (fromAddress == null)
+ {
+ // First, attempt to get the email address from the JNDI Mail Session.
+ if (pSession != null && c_useJndi)
+ {
+ fromAddress = pSession.getProperty(MailUtil.PROP_MAIL_SENDER);
+ }
+ // If unsuccessful, get the email address from the properties or default.
+ if (fromAddress == null) {
+ fromAddress = pProperties.getProperty(PROP_MAIL_SENDER, DEFAULT_SENDER).trim();
+ }
+ }
+ return fromAddress;
+ }
+
+ /**
+ * Returns the Mail Session from either JNDI or creates a stand-alone.
+ * @param engine a <code>WikiEngine</code>
+ * @return <code>Session</code>
*/
- public static void sendMessage(WikiEngine engine, String to, String from, String subject, String content)
- throws MessagingException
+ private static Session getMailSession(WikiEngine engine)
{
+ Session result = null;
Properties props = engine.getWikiProperties();
- String jndiName = props.getProperty( PROP_MAIL_JNDI_NAME, DEFAULT_MAIL_JNDI_NAME ).trim();
- Session session = null;
+ String jndiName = props.getProperty(PROP_MAIL_JNDI_NAME, DEFAULT_MAIL_JNDI_NAME).trim();
if (c_useJndi)
{
// Try getting the Session from the JNDI factory first
try
{
- session = getJNDIMailSession(jndiName);
- c_useJndi = false;
+ result = getJNDIMailSession(jndiName);
}
catch (NamingException e)
{
// Oops! JNDI factory must not be set up
+ c_useJndi = false;
}
}
// JNDI failed; so, get the Session from the standalone factory
- if ( session == null )
+ if (result == null)
{
- session = getStandaloneMailSession( props );
- }
-
- try
- {
- // Create and address the message
- MimeMessage msg = new MimeMessage( session );
- msg.setFrom( new InternetAddress( from ) );
- msg.setRecipients( Message.RecipientType.TO, InternetAddress.parse( to, false ) );
- msg.setSubject( subject );
- msg.setText( content, "UTF-8" );
- msg.setSentDate( new Date() );
-
- // Send and log it
- Transport.send( msg );
- if ( log.isInfoEnabled() )
- {
- log.info( "Sent e-mail to=" + to + ", subject=\"" + subject
- + "\", jndi=" + ( c_useJndi ? TRUE : FALSE ) );
- }
- }
- catch ( MessagingException e )
- {
- log.error( e );
- throw e;
+ result = getStandaloneMailSession(props);
}
+ return result;
}
- // --------- JavaMail Session Helper methods ---------------------------------
-
/**
* Returns a stand-alone JavaMail Session by looking up the correct
* mail account, password and host from a supplied set of properties.
@@ -453,6 +462,7 @@
/**
* Returns the password used to authenticate to the SMTP server.
+ * @return <code>PasswordAuthentication</code>
*/
public PasswordAuthentication getPasswordAuthentication()
{