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.text.DateFormat;
020 import java.util.Date;
021
022 import javax.mail.Address;
023 import javax.mail.Message;
024 import javax.mail.MessagingException;
025
026 /**
027 * Mail utility class.
028 * <p>
029 * Parts of the code copied from Apache ServiceMix.
030 *
031 * @version $Revision: 13690 $
032 */
033 public final class MailUtils {
034
035 public static final int DEFAULT_PORT_SMTP = 25;
036 public static final int DEFAULT_PORT_SMTPS = 465;
037 public static final int DEFAULT_PORT_POP3 = 110;
038 public static final int DEFAULT_PORT_POP3S = 995;
039 public static final int DEFAULT_PORT_NNTP = 119;
040 public static final int DEFAULT_PORT_IMAP = 143;
041 public static final int DEFAULT_PORT_IMAPS = 993;
042
043 public static final String PROTOCOL_SMTP = "smtp";
044 public static final String PROTOCOL_SMTPS = "smtps";
045 public static final String PROTOCOL_POP3 = "pop3";
046 public static final String PROTOCOL_POP3S = "pop3s";
047 public static final String PROTOCOL_NNTP = "nntp";
048 public static final String PROTOCOL_IMAP = "imap";
049 public static final String PROTOCOL_IMAPS = "imaps";
050
051 private MailUtils() {
052 }
053
054 /**
055 * Returns the default port for a given protocol.
056 * <p>
057 * If a protocol could not successfully be determined the default port number for SMTP protocol is returned.
058 *
059 * @param protocol the protocol
060 * @return the default port
061 */
062 public static int getDefaultPortForProtocol(final String protocol) {
063 int port = DEFAULT_PORT_SMTP;
064
065 if (protocol != null) {
066 if (protocol.equalsIgnoreCase(PROTOCOL_IMAP)) {
067 port = DEFAULT_PORT_IMAP;
068 } else if (protocol.equalsIgnoreCase(PROTOCOL_IMAPS)) {
069 port = DEFAULT_PORT_IMAPS;
070 } else if (protocol.equalsIgnoreCase(PROTOCOL_NNTP)) {
071 port = DEFAULT_PORT_NNTP;
072 } else if (protocol.equalsIgnoreCase(PROTOCOL_POP3)) {
073 port = DEFAULT_PORT_POP3;
074 } else if (protocol.equalsIgnoreCase(PROTOCOL_POP3S)) {
075 port = DEFAULT_PORT_POP3S;
076 } else if (protocol.equalsIgnoreCase(PROTOCOL_SMTP)) {
077 port = DEFAULT_PORT_SMTP;
078 } else if (protocol.equalsIgnoreCase(PROTOCOL_SMTPS)) {
079 port = DEFAULT_PORT_SMTPS;
080 } else {
081 port = DEFAULT_PORT_SMTP;
082 }
083 }
084
085 return port;
086 }
087
088 /**
089 * Gets a log dump of the given message that can be used for tracing etc.
090 *
091 * @param message the Mail message
092 * @return a log string with important fields dumped
093 */
094 public static String dumpMessage(Message message) {
095 if (message == null) {
096 return "null";
097 }
098
099 try {
100 StringBuilder sb = new StringBuilder();
101
102 int number = message.getMessageNumber();
103 sb.append("messageNumber=[").append(number).append("]");
104
105 Address[] from = message.getFrom();
106 if (from != null) {
107 for (Address adr : from) {
108 sb.append(", from=[").append(adr).append("]");
109 }
110 }
111
112 Address[] to = message.getRecipients(Message.RecipientType.TO);
113 if (to != null) {
114 for (Address adr : to) {
115 sb.append(", to=[").append(adr).append("]");
116 }
117 }
118
119 String subject = message.getSubject();
120 if (subject != null) {
121 sb.append(", subject=[").append(subject).append("]");
122 }
123
124 Date sentDate = message.getSentDate();
125 if (sentDate != null) {
126 sb.append(", sentDate=[").append(DateFormat.getDateTimeInstance().format(sentDate)).append("]");
127 }
128
129 Date receivedDate = message.getReceivedDate();
130 if (receivedDate != null) {
131 sb.append(", receivedDate=[").append(DateFormat.getDateTimeInstance().format(receivedDate)).append("]");
132 }
133
134 return sb.toString();
135 } catch (MessagingException e) {
136 // ignore the error and just return tostring
137 return message.toString();
138 }
139 }
140 }