Author: ffang
Date: Fri Jun 25 03:43:09 2010
New Revision: 957790

URL: http://svn.apache.org/viewvc?rev=957790&view=rev
Log:
[SM-1956]It should be possible to set the username/password via a 
header/property for the servicemix-mail provider

Modified:
    
servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java

Modified: 
servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java
URL: 
http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java?rev=957790&r1=957789&r2=957790&view=diff
==============================================================================
--- 
servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java
 (original)
+++ 
servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java
 Fri Jun 25 03:43:09 2010
@@ -58,6 +58,9 @@ public class MailSenderEndpoint extends 
     private Map<String, String> customProperties = new HashMap<String, 
String>();
     private IgnoreList ignoreMessageProperties = new IgnoreList();
 
+    public static final String MAIL_USERNAME = 
"org.apache.servicemix.mail.username";
+    public static final String MAIL_PASSWORD = 
"org.apache.servicemix.mail.password";
+
     /*
      * (non-Javadoc)
      * @see org.apache.servicemix.common.Endpoint#validate()
@@ -90,43 +93,8 @@ public class MailSenderEndpoint extends 
             exchange.setStatus(ExchangeStatus.DONE);
             getChannel().send(exchange);
         } else {
-            Session session;
             try {
-                Properties props = 
MailUtils.getPropertiesForProtocol(this.config, this.customTrustManagers);
-                props.put("mail.debug", isDebugMode() ? "true" : "false");
-
-                // apply the custom properties
-                applyCustomProperties(props);
-
-                // Get session
-                session = Session.getInstance(props, 
config.getAuthenticator());
-
-                // debug the session
-                session.setDebug(this.debugMode);
-
-                // get the transport from session
-                Transport transport = 
session.getTransport(config.getProtocol());
-
-                // Connect only once here
-                // Transport.send() disconnects after each send
-                // Usually, no username and password is required for SMTP
-                transport.connect(config.getHost(), config.getPort(), 
config.getUsername(), config
-                    .getPassword());
-
-                // Define message
-                MimeMessage msg = new MimeMessage(session);
-
-                // handle ignore properties
-                handleIgnoreProperties(in);
-
-                // let the marshaler to the conversion of message to mail
-                this.marshaler.convertJBIToMail(msg, exchange, in, 
this.sender, this.receiver);
-
-                // Send message
-                transport.sendMessage(msg, msg.getAllRecipients());
-
-                // close transport
-                transport.close();
+                sendMail(exchange, in);
             } catch (MessagingException mex) {
                 logger.error("Error sending mail...", mex);
                 throw mex;
@@ -159,54 +127,72 @@ public class MailSenderEndpoint extends 
             exchange.setStatus(ExchangeStatus.DONE);
             getChannel().send(exchange);
         } else {
-            Session session;
             try {
-                Properties props = 
MailUtils.getPropertiesForProtocol(this.config, this.customTrustManagers);
-                props.put("mail.debug", isDebugMode() ? "true" : "false");
+                sendMail(exchange, in);
+                // quit the exchange
+                out.setContent(new StringSource("<ack />"));
+            } catch (MessagingException mex) {
+                logger.error("Error sending mail...", mex);
+                throw mex;
+            } finally {
+                // delete all temporary allocated resources
+                this.marshaler.cleanUpResources(exchange.getExchangeId());
+            }
+        }
+    }
 
-                // apply the custom properties
-                applyCustomProperties(props);
+    private String getUsername(NormalizedMessage in) {
+        if (in.getProperty(MAIL_USERNAME) != null) {
+            return (String)in.getProperty(MAIL_USERNAME);
+        } else {
+            return config.getUsername();
+        }
+    }
 
-                // Get session
-                session = Session.getInstance(props, 
config.getAuthenticator());
+    private String getPassword(NormalizedMessage in) {
+        if (in.getProperty(MAIL_PASSWORD) != null) {
+            return (String)in.getProperty(MAIL_PASSWORD);
+        } else {
+            return config.getPassword();
+        }
+    }
 
-                // debug the session
-                session.setDebug(this.debugMode);
+    private void sendMail(MessageExchange exchange, NormalizedMessage in) 
throws Exception {
+        Session session;
+        Properties props = MailUtils.getPropertiesForProtocol(this.config, 
this.customTrustManagers);
+        props.put("mail.debug", isDebugMode() ? "true" : "false");
 
-                // get the transport from session
-                Transport transport = 
session.getTransport(config.getProtocol());
+        // apply the custom properties
+        applyCustomProperties(props);
 
-                // Connect only once here
-                // Transport.send() disconnects after each send
-                // Usually, no username and password is required for SMTP
-                transport.connect(config.getHost(), config.getPort(), 
config.getUsername(), config
-                    .getPassword());
+        // Get session
+        session = Session.getInstance(props, config.getAuthenticator());
 
-                // Define message
-                MimeMessage msg = new MimeMessage(session);
+        // debug the session
+        session.setDebug(this.debugMode);
 
-                // handle ignore properties
-                handleIgnoreProperties(in);
+        // get the transport from session
+        Transport transport = session.getTransport(config.getProtocol());
 
-                // let the marshaler to the conversion of message to mail
-                this.marshaler.convertJBIToMail(msg, exchange, in, 
this.sender, this.receiver);
+        // Connect only once here
+        // Transport.send() disconnects after each send
+        // Usually, no username and password is required for SMTP
+        transport.connect(config.getHost(), config.getPort(), getUsername(in), 
getPassword(in));
 
-                // Send message
-                transport.sendMessage(msg, msg.getAllRecipients());
+        // Define message
+        MimeMessage msg = new MimeMessage(session);
 
-                // close transport
-                transport.close();
+        // handle ignore properties
+        handleIgnoreProperties(in);
 
-                // quit the exchange
-                out.setContent(new StringSource("<ack />"));
-            } catch (MessagingException mex) {
-                logger.error("Error sending mail...", mex);
-                throw mex;
-            } finally {
-                // delete all temporary allocated resources
-                this.marshaler.cleanUpResources(exchange.getExchangeId());
-            }
-        }
+        // let the marshaler to the conversion of message to mail
+        this.marshaler.convertJBIToMail(msg, exchange, in, this.sender, 
this.receiver);
+
+        // Send message
+        transport.sendMessage(msg, msg.getAllRecipients());
+
+        // close transport
+        transport.close();
     }
 
     /**


Reply via email to