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