001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.camel.component.mail;
018
019 import java.util.Map;
020 import javax.activation.DataHandler;
021 import javax.mail.Message;
022 import javax.mail.MessagingException;
023
024 import org.apache.camel.RuntimeCamelException;
025 import org.apache.camel.impl.DefaultMessage;
026 import org.apache.camel.util.ExchangeHelper;
027
028 /**
029 * Represents a {@link org.apache.camel.Message} for working with Mail
030 *
031 * @version $Revision:520964 $
032 */
033 public class MailMessage extends DefaultMessage {
034 // we need a copy of the original message in case we need to workaround a charset issue when extracting
035 // mail content, see more in MailBinding
036 private Message originalMailMessage;
037 private Message mailMessage;
038
039 public MailMessage() {
040 }
041
042 public MailMessage(Message message) {
043 this.originalMailMessage = this.mailMessage = message;
044 }
045
046 @Override
047 public String toString() {
048 if (mailMessage != null) {
049 return "MailMessage: " + MailUtils.dumpMessage(mailMessage);
050 } else {
051 return "MailMessage: " + getBody();
052 }
053 }
054
055 public MailMessage copy() {
056 MailMessage answer = (MailMessage)super.copy();
057 answer.originalMailMessage = originalMailMessage;
058 answer.mailMessage = mailMessage;
059 return answer;
060 }
061
062 /**
063 * Returns the original underlying Mail message
064 */
065 public Message getOriginalMessage() {
066 return originalMailMessage;
067 }
068
069 /**
070 * Returns the underlying Mail message
071 */
072 public Message getMessage() {
073 return mailMessage;
074 }
075
076 public void setMessage(Message mailMessage) {
077 if (this.originalMailMessage == null) {
078 this.originalMailMessage = mailMessage;
079 }
080 this.mailMessage = mailMessage;
081 }
082
083 @Override
084 public MailMessage newInstance() {
085 return new MailMessage();
086 }
087
088 @Override
089 protected Object createBody() {
090 if (mailMessage != null) {
091 MailBinding binding = ExchangeHelper.getBinding(getExchange(), MailBinding.class);
092 return binding != null ? binding.extractBodyFromMail(getExchange(), this) : null;
093 }
094 return null;
095 }
096
097 @Override
098 protected void populateInitialHeaders(Map<String, Object> map) {
099 if (mailMessage != null) {
100 try {
101 MailBinding binding = ExchangeHelper.getBinding(getExchange(), MailBinding.class);
102 if (binding != null) {
103 map.putAll(binding.extractHeadersFromMail(mailMessage, getExchange()));
104 }
105 } catch (MessagingException e) {
106 throw new RuntimeCamelException("Error accessing headers due to: " + e.getMessage(), e);
107 }
108 }
109 }
110
111 @Override
112 protected void populateInitialAttachments(Map<String, DataHandler> map) {
113 if (mailMessage != null) {
114 try {
115 MailBinding binding = ExchangeHelper.getBinding(getExchange(), MailBinding.class);
116 if (binding != null) {
117 binding.extractAttachmentsFromMail(mailMessage, map);
118 }
119 } catch (Exception e) {
120 throw new RuntimeCamelException("Error populating the initial mail message attachments", e);
121 }
122 }
123 }
124
125 public void copyFrom(org.apache.camel.Message that) {
126 super.copyFrom(that);
127 if (that instanceof MailMessage) {
128 MailMessage mailMessage = (MailMessage) that;
129 this.originalMailMessage = mailMessage.originalMailMessage;
130 this.mailMessage = mailMessage.mailMessage;
131 }
132 }
133
134 }