
at.molindo.notify.channel.mail.SimpleMailClient Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of molindo-notify Show documentation
Show all versions of molindo-notify Show documentation
Extensible notification framework
The newest version!
/**
* Copyright 2010 Molindo GmbH
*
* 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 at.molindo.notify.channel.mail;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import org.springframework.beans.factory.InitializingBean;
public class SimpleMailClient extends AbstractMailClient implements InitializingBean {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(SimpleMailClient.class);
// server config
private String _server;
private Integer _port;
private String _user;
private String _password;
private Security _security = Security.NONE;
private Session _smtpSession = null;
private boolean _connect = true;
private boolean _failOnConnectError = true;
public SimpleMailClient() {
}
public SimpleMailClient(String server, String from) throws AddressException, MailException {
setServer(server);
setFrom(from);
init();
}
@Override
public SimpleMailClient init() throws MailException {
super.init();
if (_smtpSession == null) {
_smtpSession = createSmtpSession();
try {
connectTransport();
} catch (MailException e) {
if (_failOnConnectError) {
throw e;
} else {
log.warn("failed to connect transport", e);
}
}
}
return this;
}
private Transport connectTransport() throws MailException {
try {
Transport t = _smtpSession.getTransport("smtp");
if (isConnect() && !t.isConnected()) {
t.connect();
}
return t;
} catch (NoSuchProviderException e) {
throw new RuntimeException("no SMTP provider?", e);
} catch (MessagingException e) {
throw new MailException("can't connect to SMTP server", e, true);
}
}
protected Session createSmtpSession() {
final Properties props = new Properties();
props.setProperty("mail.smtp.host", _server);
props.setProperty("mail.smtp.port", Integer.toString(_port != null ? _port : _security.getDefaultPort()));
props.setProperty("mail.smtp.auth", Boolean.toString(_user != null));
if (_security == Security.TLS) {
props.setProperty("mail.smtp.starttls.enable", "true");
} else if (_security == Security.SSL) {
props.put("mail.smtp.ssl", "true");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
}
// props.put("mail.debug", "true");
return Session.getInstance(props, new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
if (_user != null) {
return new PasswordAuthentication(_user, _password);
} else {
return null;
}
}
});
}
@Override
protected Session getSmtpSession(String recipient) throws MailException {
connectTransport();
return _smtpSession;
}
public String getServer() {
return _server;
}
public SimpleMailClient setServer(String server) {
_server = server;
return this;
}
public Integer getPort() {
return _port;
}
public SimpleMailClient setPort(Integer port) {
_port = port;
return this;
}
public String getUser() {
return _user;
}
public SimpleMailClient setUser(String user) {
_user = user;
return this;
}
public String getPassword() {
return _password;
}
public SimpleMailClient setPassword(String password) {
_password = password;
return this;
}
public Security getSecurity() {
return _security;
}
public SimpleMailClient setSecurity(Security security) {
_security = security;
return this;
}
public boolean isConnect() {
return _connect;
}
/**
* disable for testing, as connecting shouldn't be necessary. We want to
* detect misconfiguration early in production though
*/
public SimpleMailClient setConnect(boolean connect) {
_connect = connect;
return this;
}
public boolean isFailOnConnectError() {
return _failOnConnectError;
}
public SimpleMailClient setFailOnConnectError(boolean failOnConnectError) {
_failOnConnectError = failOnConnectError;
return this;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy