/* See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * Esri Inc. licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.esri.gpt.framework.mail; import com.esri.gpt.framework.collection.StringSet; import com.esri.gpt.framework.util.Val; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; /** * A simple client for sending SMTP based E-Mail messages. */ public class MailRequest { // class variables ============================================================= /** Mime type - HTML, "text/html; charset=UTF-8" */ public static final String MIMETYPE_HTML = "text/html; charset=UTF-8"; /** Mime type - plain, "text/plain; charset=UTF-8" */ public static final String MIMETYPE_PLAIN = "text/plain; charset=UTF-8"; // instance variables ========================================================== private Authenticator _authenticator; private String _body = ""; private String _fromAddress = ""; private String _host = ""; private String _mimeType = MIMETYPE_PLAIN; private int _port = -1; private StringSet _recipients; private String _subject = ""; private String _toAddress = ""; //constructors ================================================================ /** Default constructor. */ public MailRequest() { setRecipients(new StringSet()); } /** * Constructs with an authenticator if crendentials are required by the mail server. * @param authenticator the authenticator */ public MailRequest(Authenticator authenticator) { _authenticator = authenticator; setRecipients(new StringSet()); } // properties ================================================================== /** * Gets the body. * @return the body */ public String getBody() { return _body; } /** * Sets the body. * @param body the body */ public void setBody(String body) { _body = Val.chkStr(body); } /** * Gets the from E-Mail address. * @return the from address */ public String getFromAddress() { return _fromAddress; } /** * Sets the from E-Mail address. * @param address the from address */ public void setFromAddress(String address) { _fromAddress = Val.chkStr(address); } /** * Gets the host. * @return the host */ public String getHost() { return _host; } /** * Sets the host. * @param host the host */ public void setHost(String host) { _host = Val.chkStr(host); } /** * Gets the Mime type. * @return the Mime type */ public String getMimeType() { return _mimeType; } /** * Sets the Mime type to text/html. */ public void setMimeTypeHtml() { _mimeType = MIMETYPE_HTML; } /** * Sets the Mime type to text/plain. */ public void setMimeTypePlain() { _mimeType = MIMETYPE_PLAIN; } /** * Gets the port. * @return the port */ public int getPort() { return _port; } /** * Sets the port. * @param port the port */ public void setPort(int port) { _port = port; } /** * Gets the recipients. * @return the recipients */ public StringSet getRecipients() { return _recipients; } /** * Sets the recipients. * @param recipients the recipients */ private void setRecipients(StringSet recipients) { _recipients = recipients; } /** * Gets the subject. * @return the subject */ public String getSubject() { return _subject; } /** * Sets the subject. * @param subject the subject */ public void setSubject(String subject) { _subject = Val.chkStr(subject); } /** * Gets the to E-Mail address. * @return the to address */ public String getToAddress() { return _toAddress; } /** * Sets the to E-Mail address. * <br/>The address is used to immediately set the recipients. The address * string is tokenized with delimiters: * <br/> semi-colon comma space * @param address the to address */ public void setToAddress(String address) { _toAddress = Val.chkStr(address); getRecipients().clear(); getRecipients().addDelimited(getToAddress()); } // methods ===================================================================== /** * Makes an Internet E-Mail address. * @param address the E-Mail address string * @return the Internet address * @throws AddressException if the E-Mail address is invalid */ private InternetAddress makeAddress(String address) throws AddressException { return new InternetAddress(address); } /** * Sends the E-Mail message. * @throws AddressException if an E-Mail address is invalid * @throws MessagingException if an exception occurs */ public void send() throws AddressException, MessagingException { // setup the mail server properties Properties props = new Properties(); props.put("mail.smtp.host",getHost()); if (getPort() > 0) { props.put("mail.smtp.port",""+getPort()); } // set up the message Session session = Session.getDefaultInstance(props,_authenticator); Message message = new MimeMessage(session); message.setSubject(getSubject()); message.setContent(getBody(),getMimeType()); message.setFrom(makeAddress(getFromAddress())); for (String sTo: getRecipients()) { message.addRecipient(Message.RecipientType.TO,makeAddress(sTo)); } // send the message Transport.send(message); } }