    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.logging.log4j.core.net;
    018
    019    import javax.mail.Message;
    020    import javax.mail.MessagingException;
    021    import javax.mail.Session;
    022    import javax.mail.internet.AddressException;
    023    import javax.mail.internet.InternetAddress;
    024    import javax.mail.internet.MimeMessage;
    025
    026    import org.apache.logging.log4j.core.util.Constants;
    027
    028    /**
    029     *  Helper class for SmtpManager.
    030     */
    031    public class MimeMessageBuilder {
    032        private final MimeMessage message;
    033
    034        public MimeMessageBuilder(final Session session) {
    035            message = new MimeMessage(session);
    036        }
    037
    038        public MimeMessageBuilder setFrom(final String from) throws MessagingException {
    039            final InternetAddress address = parseAddress(from);
    040
    041            if (null != address) {
    042                message.setFrom(address);
    043            } else {
    044                try {
    045                    message.setFrom();
    046                } catch (final Exception ex) {
    047                    message.setFrom((InternetAddress) null);
    048                }
    049            }
    050            return this;
    051        }
    052
    053        public MimeMessageBuilder setReplyTo(final String replyTo) throws MessagingException {
    054            final InternetAddress[] addresses = parseAddresses(replyTo);
    055
    056            if (null != addresses) {
    057                message.setReplyTo(addresses);
    058            }
    059            return this;
    060        }
    061
    062        public MimeMessageBuilder setRecipients(final Message.RecipientType recipientType, final String recipients)
    063            throws MessagingException {
    064            final InternetAddress[] addresses = parseAddresses(recipients);
    065
    066            if (null != addresses) {
    067                message.setRecipients(recipientType, addresses);
    068            }
    069            return this;
    070        }
    071
    072        public MimeMessageBuilder setSubject(final String subject) throws MessagingException {
    073            if (subject != null) {
    074                message.setSubject(subject, Constants.UTF_8.name());
    075            }
    076            return this;
    077        }
    078
    079        public MimeMessage getMimeMessage() {
    080            return message;
    081        }
    082
    083        private static InternetAddress parseAddress(final String address) throws AddressException {
    084            return address == null ? null : new InternetAddress(address);
    085        }
    086
    087        private static InternetAddress[] parseAddresses(final String addresses) throws AddressException {
    088            return addresses == null ? null : InternetAddress.parse(addresses, true);
    089        }
    090    }