com.github.lucapino.jira.helpers.ProjectJavamailMailSender Maven / Gradle / Ivy
/*
* Copyright 2013-2017 Luca Tagliani.
*
* Licensed 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.github.lucapino.jira.helpers;
import java.security.Security;
import java.util.Date;
import java.util.Iterator;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.codehaus.plexus.mailsender.AbstractMailSender;
import org.codehaus.plexus.mailsender.MailMessage;
import org.codehaus.plexus.mailsender.MailSenderException;
import org.codehaus.plexus.mailsender.util.DateFormatUtils;
import org.codehaus.plexus.util.StringUtils;
/**
* Helper class for sending email.
*/
public class ProjectJavamailMailSender
extends AbstractMailSender {
private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
private Properties userProperties;
private Properties props;
// ----------------------------------------------------------------------
// Component Lifecycle
// ----------------------------------------------------------------------
public void initialize() {
if (StringUtils.isEmpty(getSmtpHost())) {
System.out.println("Error in configuration: Missing smtpHost.");
}
if (getSmtpPort() == 0) {
setSmtpPort(DEFAULT_SMTP_PORT);
}
props = new Properties();
props.put("mail.smtp.host", getSmtpHost());
props.put("mail.smtp.port", String.valueOf(getSmtpPort()));
if (getUsername() != null) {
props.put("mail.smtp.auth", "true");
}
props.put("mail.debug", String.valueOf(getLogger().isDebugEnabled()));
if (isSslMode()) {
try {
// Try to load the SSL Provider class before we use it, it isn't present in non-Sun JVMs
this.getClass().getClassLoader().loadClass("com.sun.net.ssl.internal.ssl.Provider");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
props.put("mail.smtp.socketFactory.port", String.valueOf(getSmtpPort()));
props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
props.put("mail.smtp.socketFactory.fallback", "false");
} catch (ClassNotFoundException e) {
getLogger().error("You can't use sslMode because your system is missing an SSL Provider.", e);
}
}
if (userProperties != null) {
for (Iterator i = userProperties.keySet().iterator(); i.hasNext();) {
String key = (String) i.next();
String value = userProperties.getProperty(key);
props.put(key, value);
}
}
}
// ----------------------------------------------------------------------
// MailSender Implementation
// ----------------------------------------------------------------------
@Override
public void send(MailMessage mail)
throws MailSenderException {
verify(mail);
try {
Authenticator auth = null;
if (getUsername() != null) {
auth = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(getUsername(), getPassword());
}
};
}
Session session = Session.getDefaultInstance(props, auth);
session.setDebug(getLogger().isDebugEnabled());
Message msg = new MimeMessage(session);
InternetAddress addressFrom = new InternetAddress(mail.getFrom().getRfc2822Address());
msg.setFrom(addressFrom);
if (mail.getToAddresses().size() > 0) {
InternetAddress[] addressTo = new InternetAddress[mail.getToAddresses().size()];
int count = 0;
for (Iterator i = mail.getToAddresses().iterator(); i.hasNext();) {
String address = ((MailMessage.Address) i.next()).getRfc2822Address();
addressTo[count++] = new InternetAddress(address);
}
msg.setRecipients(Message.RecipientType.TO, addressTo);
}
if (mail.getCcAddresses().size() > 0) {
InternetAddress[] addressCc = new InternetAddress[mail.getCcAddresses().size()];
int count = 0;
for (Iterator i = mail.getCcAddresses().iterator(); i.hasNext();) {
String address = ((MailMessage.Address) i.next()).getRfc2822Address();
addressCc[count++] = new InternetAddress(address);
}
msg.setRecipients(Message.RecipientType.CC, addressCc);
}
if (mail.getBccAddresses().size() > 0) {
InternetAddress[] addressBcc = new InternetAddress[mail.getBccAddresses().size()];
int count = 0;
for (Iterator i = mail.getBccAddresses().iterator(); i.hasNext();) {
String address = ((MailMessage.Address) i.next()).getRfc2822Address();
addressBcc[count++] = new InternetAddress(address);
}
msg.setRecipients(Message.RecipientType.BCC, addressBcc);
}
// Setting the Subject and Content Type
msg.setSubject(mail.getSubject());
msg.setContent(mail.getContent(), mail.getContentType() == null ? "text/plain" : mail.getContentType());
if (mail.getSendDate() != null) {
msg.setHeader("Date", DateFormatUtils.getDateHeader(mail.getSendDate()));
} else {
msg.setHeader("Date", DateFormatUtils.getDateHeader(new Date()));
}
// Send the message
Transport.send(msg);
} catch (MessagingException e) {
throw new MailSenderException("Error while sending mail.", e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy