This is an automated email from the ASF dual-hosted git repository. billblough pushed a commit to branch transport in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-transports.git
commit a87cb33ac0d1c2aa8b1e497d570a7d5a9746e128 Author: Amila Chinthaka Suriarachchi <ami...@apache.org> AuthorDate: Mon Nov 16 12:39:45 2009 +0000 committing some changes done to the trunk to branch --- .../apache/axis2/transport/mail/MailConstants.java | 3 +- .../axis2/transport/mail/MailTransportSender.java | 35 ++++++++++++++++------ .../apache/axis2/transport/mail/WSMimeMessage.java | 15 ++++++++-- 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/1.0.0/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailConstants.java b/1.0.0/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailConstants.java index 856d2b4..4b7ac55 100644 --- a/1.0.0/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailConstants.java +++ b/1.0.0/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailConstants.java @@ -93,6 +93,7 @@ public class MailConstants { // Custom headers /** @see org.apache.axis2.transport.mail.WSMimeMessage */ - public static final String MAIL_HEADER_X_MESSAGE_ID= "X-Message-ID"; + public static final String MAIL_HEADER_X_MESSAGE_ID = "X-Message-ID"; + public static final String TRANSPORT_MAIL_CUSTOM_HEADERS = "transport.mail.custom.headers"; } diff --git a/1.0.0/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailTransportSender.java b/1.0.0/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailTransportSender.java index c1b2c36..249bf9c 100644 --- a/1.0.0/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailTransportSender.java +++ b/1.0.0/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailTransportSender.java @@ -25,10 +25,7 @@ import org.apache.axis2.transport.base.*; import org.apache.commons.logging.LogFactory; import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.context.MessageContext; -import org.apache.axis2.description.TransportOutDescription; -import org.apache.axis2.description.Parameter; -import org.apache.axis2.description.OutOnlyAxisOperation; -import org.apache.axis2.description.TransportInDescription; +import org.apache.axis2.description.*; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.AddressingConstants; import org.apache.axis2.transport.OutTransportInfo; @@ -194,7 +191,7 @@ public class MailTransportSender extends AbstractTransportSender private void waitForReply(MessageContext msgContext, String mailMessageID) throws AxisFault { // piggy back message constant is used to pass a piggy back // message context in asnych model - if (msgContext.getAxisOperation() instanceof OutOnlyAxisOperation && + if (!(msgContext.getAxisOperation() instanceof OutInAxisOperation) && (msgContext.getProperty(org.apache.axis2.Constants.PIGGYBACK_MESSAGE) == null)) { return; } @@ -252,7 +249,13 @@ public class MailTransportSender extends AbstractTransportSender messageFormatter.getClass().getSimpleName()); } - WSMimeMessage message = new WSMimeMessage(session); + WSMimeMessage message = null; + if (outInfo.getFromAddress() != null) { + message = new WSMimeMessage(session, outInfo.getFromAddress().getAddress()); + } else { + message = new WSMimeMessage(session, ""); + } + Map trpHeaders = (Map) msgContext.getProperty(MessageContext.TRANSPORT_HEADERS); if (log.isDebugEnabled() && trpHeaders != null) { log.debug("Using transport headers: " + trpHeaders); @@ -442,10 +445,24 @@ public class MailTransportSender extends AbstractTransportSender // always use quoted-printable transfer encoding. Note that JavaMail is a bit smarter // here because it can choose between 7bit and quoted-printable automatically, but it // needs to scan the entire content to determine this. - String contentType = dataHandler.getContentType().toLowerCase(); - if (!contentType.startsWith("multipart/") && CommonUtils.isTextualPart(contentType)) { - mainPart.setHeader("Content-Transfer-Encoding", "quoted-printable"); + if (msgContext.getOptions().getProperty("Content-Transfer-Encoding") != null) { + mainPart.setHeader("Content-Transfer-Encoding", + (String) msgContext.getOptions().getProperty("Content-Transfer-Encoding")); + } else { + String contentType = dataHandler.getContentType().toLowerCase(); + if (!contentType.startsWith("multipart/") && CommonUtils.isTextualPart(contentType)) { + mainPart.setHeader("Content-Transfer-Encoding", "quoted-printable"); + } } + + //setting any custom headers defined by the user + if (msgContext.getOptions().getProperty(MailConstants.TRANSPORT_MAIL_CUSTOM_HEADERS) != null) { + Map customTransportHeaders = (Map) msgContext.getOptions().getProperty(MailConstants.TRANSPORT_MAIL_CUSTOM_HEADERS); + for (Object header : customTransportHeaders.keySet()) { + mainPart.setHeader((String) header, (String) customTransportHeaders.get(header)); + } + } + log.debug("Sending message"); Transport.send(message); diff --git a/1.0.0/modules/mail/src/main/java/org/apache/axis2/transport/mail/WSMimeMessage.java b/1.0.0/modules/mail/src/main/java/org/apache/axis2/transport/mail/WSMimeMessage.java index d2a4f4f..369b671 100644 --- a/1.0.0/modules/mail/src/main/java/org/apache/axis2/transport/mail/WSMimeMessage.java +++ b/1.0.0/modules/mail/src/main/java/org/apache/axis2/transport/mail/WSMimeMessage.java @@ -38,15 +38,24 @@ import javax.mail.Session; */ public class WSMimeMessage extends MimeMessage { private long bytesSent = -1; + private String fromAddress; - WSMimeMessage(Session session) { + + WSMimeMessage(Session session, String fromAddress) { super(session); + this.fromAddress = fromAddress; } @Override protected void updateMessageID() throws MessagingException { - if (getHeader(MailConstants.MAIL_HEADER_MESSAGE_ID) == null) { - setHeader(MailConstants.MAIL_HEADER_MESSAGE_ID, UUIDGenerator.getUUID()); + // although MailConstants.MAIL_HEADER_X_MESSAGE_ID solves the gmail problem with axis2-axis2 + // invocations it is not a generic solution. + // we can over come gmail problem by setting the message id as follows with a valid gmail address + // <x...@gmail.com> this can be achived by appending from address at the end of uuid + + if (getHeader(MailConstants.MAIL_HEADER_MESSAGE_ID) == null) { + String uuid = "<" + UUIDGenerator.getUUID().replaceAll(":",".") + fromAddress +">"; + setHeader(MailConstants.MAIL_HEADER_MESSAGE_ID, uuid); } }