Java tutorial
/** * Copyright (C) 2008-2010, Squale Project - http://www.squale.org * * This file is part of Squale. * * Squale is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the * License, or any later version. * * Squale is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squale. If not, see <http://www.gnu.org/licenses/>. */ package org.squale.squalecommon.util.mail.javamail; import java.util.Collection; import java.util.Iterator; import java.util.Properties; 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; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.squale.jraf.commons.exception.JrafDaoException; import org.squale.jraf.helper.PersistenceHelper; import org.squale.jraf.spi.persistence.ISession; import org.squale.squalecommon.daolayer.config.AdminParamsDAOImpl; import org.squale.squalecommon.enterpriselayer.businessobject.config.AdminParamsBO; import org.squale.squalecommon.util.mail.IMailerProvider; import org.squale.squalecommon.util.mail.MailException; import org.squale.squalecommon.util.mail.MailMessages; /** * Mail provider, implementation for javaMail */ public class JavaMailProviderImpl implements IMailerProvider { /** logger */ private static final Log LOG = LogFactory.getLog(JavaMailProviderImpl.class); /** * SMTP server to use for sent mail. */ private static String smtpServer; /** * Default sender. */ private static String senderAddress; /** * SMTP authentication needed ? */ private static boolean isSmtpAuthenticationNeeded; /** * SMTP authentication : user name */ private static String username; /** * SMTP authentication : password */ private static String password; /** * Constructor */ protected JavaMailProviderImpl() { } /** * This method send mail * * @param sender Sender Address * @param recipients List of recipient address * @param subject Subject of the mail * @param content Content of the mail * @throws MailException Exception happened the send of the mail */ public void sendMail(String sender, String[] recipients, String subject, String content) throws MailException { // Initialization of the mail provider init(); // if there is mail configuration information if (smtpServer != null && (senderAddress != null || sender != null)) { // Properties used for sending mails Properties props = System.getProperties(); props.put("mail.smtp.host", smtpServer); Session session = smtpAuthent(props); // Header message definition MimeMessage message = new MimeMessage(session); try { // If a sender argument is not null we use it if (sender != null) { message.setFrom(new InternetAddress(sender)); } // If the sender argument is null else { message.setFrom(new InternetAddress(senderAddress)); } // We send to each recipient for (int i = 0; i <= recipients.length - 1; i++) { String mailAddress = (String) recipients[i]; LOG.debug("Recipent : " + recipients[i]); message.addRecipient(Message.RecipientType.BCC, new InternetAddress(mailAddress)); } // Body message definition message.setSubject(subject); message.setText(content, "iso-8859-1"); // Send of the mail Transport.send(message); } catch (AddressException e) { throw new MailException(e); } catch (MessagingException e) { throw new MailException(e); } } else { String message = MailMessages.getString("mail.exception.noConfig"); throw new MailException(message); } } /** * Initialize the mail provider */ public static void init() { try { AdminParamsDAOImpl dao = AdminParamsDAOImpl.getInstance(); AdminParamsBO bo; ISession session = PersistenceHelper.getPersistenceProvider().getSession(); Collection<AdminParamsBO> adminParamsBOCollection = dao.findByKeyLike(session, AdminParamsBO.MAIL); Iterator<AdminParamsBO> adminParamsIterator = adminParamsBOCollection.iterator(); while (adminParamsIterator.hasNext()) { bo = adminParamsIterator.next(); if (bo.getParamKey().equals(AdminParamsBO.MAIL_SMTP_SERVER)) { smtpServer = bo.getParamValue(); } else if (bo.getParamKey().equals(AdminParamsBO.MAIL_SENDER_ADDRESS)) { senderAddress = bo.getParamValue(); } else if (bo.getParamKey().equals(AdminParamsBO.MAIL_SMTP_AUTHENT_NEEDED)) { if (bo.getParamValue().equals(true)) { isSmtpAuthenticationNeeded = true; } else { isSmtpAuthenticationNeeded = false; } } else if (bo.getParamKey().equals(AdminParamsBO.MAIL_SMTP_USERNAME)) { username = bo.getParamValue(); } else if (bo.getParamKey().equals(AdminParamsBO.MAIL_SMTP_PASSWORD)) { password = bo.getParamValue(); } } } catch (JrafDaoException e) { LOG.error(MailMessages.getString("mail.exception.initialization")); LOG.error(e.getMessage()); } } /** * This method return a session according to we use the SMTP authentication or not * * @param props the properties for sending a mail * @return the session for sending the mail */ private Session smtpAuthent(Properties props) { Session session = null; if (isSmtpAuthenticationNeeded) { SmtpAuthenticator authent = new SmtpAuthenticator(username, password); props.put("mail.smtp.auth", "true"); session = Session.getDefaultInstance(props, authent); } else { // Session recovering session = Session.getDefaultInstance(props, null); } return session; } }