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();
}
/**