package com.epam.cisen.email;
import java.util.Dictionary;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.Email;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.ConfigurationPolicy;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.epam.cisen.core.api.AbstractMessenger;
import com.epam.cisen.core.api.Messenger;
import com.epam.cisen.core.api.dto.ToSend;
import com.epam.cisen.core.api.util.PropertiesUtil;
@Component(label = "Email messenger", metatype = true, policy = ConfigurationPolicy.REQUIRE)
@Service(Messenger.class)
@Properties({ @Property(name = EmailMessenger.SMTP_SERVER, label = "SMTP server"),
@Property(name = EmailMessenger.SMTP_PORT, label = "SMTP server port", intValue = 465),
@Property(name = EmailMessenger.SMTP_LOGIN, label = "Login"),
@Property(name = EmailMessenger.SMTP_PASSWORD, label = "Password", passwordValue = ""),
@Property(name = EmailMessenger.SENDER_EMAIL, label = "Sender FROM address", value = "cisen@fakedomen.info") })
public class EmailMessenger extends AbstractMessenger<EmailConfigDTO> {
private static final Logger LOGGER = LoggerFactory.getLogger(EmailMessenger.class);
static final String SMTP_SERVER = "email.config.smtp.server";
static final String SMTP_PORT = "email.config.smtp.port";
static final String SMTP_LOGIN = "email.config.smtp.login";
static final String SMTP_PASSWORD = "email.config.smtp.password";
static final String SENDER_EMAIL = "email.config.sender.email";
private String server;
private int port;
private String login;
private String password;
private String from;
@Override
protected EmailConfigDTO getPluginTemplateConfig() {
EmailConfigDTO res = new EmailConfigDTO();
res.setRecipient("Your email.");
return res;
}
@Override
protected void activatePlugin(ComponentContext componentContext) {
final Dictionary properties = componentContext.getProperties();
server = PropertiesUtil.toString(properties.get(SMTP_SERVER), StringUtils.EMPTY);
port = PropertiesUtil.toInteger(properties.get(SMTP_PORT), 465);
login = PropertiesUtil.toString(properties.get(SMTP_LOGIN), StringUtils.EMPTY);
password = PropertiesUtil.toString(properties.get(SMTP_PASSWORD), StringUtils.EMPTY);
from = PropertiesUtil.toString(properties.get(SENDER_EMAIL), StringUtils.EMPTY);
}
@Override
protected void send(EmailConfigDTO configDTO, ToSend message) {
try {
Email email = new SimpleEmail();
email.setHostName(server);
email.setSmtpPort(port);
email.setAuthenticator(new DefaultAuthenticator(login, password));
email.setSSLOnConnect(true);
email.setFrom(from);
email.setSubject(message.getSubject());
email.setMsg(message.getBody());
email.addTo(configDTO.getRecipient());
email.send();
} catch (EmailException ex) {
LOGGER.error("Send E-mail exception.", ex);
}
}
}