package gov.samhsa.consent2share.showcase.service; import gov.samhsa.consent2share.showcase.exception.AcsShowCaseException; import java.io.IOException; import java.util.Date; import java.util.Properties; import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Store; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MailServiceImpl implements MailService { private Properties properties; private MailDto mailDto; private String errorMessage; private final Logger logger = LoggerFactory.getLogger(this.getClass()); public MailServiceImpl() { try { //props.load(new FileInputStream("mail.properties")); properties = new Properties(); properties.load(this.getClass().getClassLoader().getResourceAsStream("mail.properties")); mailDto = new MailDto(); mailDto.setImapServerHost(properties.getProperty("imapServerHost")); mailDto.setImapPort(properties.getProperty("imapPort")); mailDto.setSmtpServerHost(properties.getProperty("smtpServerHost")); mailDto.setSmptPort(properties.getProperty("smtpPort")); mailDto.setUsername(properties.getProperty("username")); mailDto.setPassword(properties.getProperty("password")); } catch (IOException ex) { logger.error("Cannot load properties"); ex.printStackTrace(); } } @Override public void sendMailOnFailure(ProviderDto senderProvider, ProviderDto receiverProvider, String message) { String to = senderProvider.getEmail(); String from = "admin@direct.obhita-stage.org"; // Create properties, get Session Properties props = new Properties(); // If using static Transport.send(), // need to specify which host to send it to props.put("mail.smtp.host", mailDto.getSmtpServerHost()); // To see what is going on behind the scene props.put("mail.debug", "true"); props.setProperty("mail.store.protocol", "imap"); Session session = Session.getInstance(props); try { Store store = session.getStore("imap"); store.connect(mailDto.getImapServerHost(), mailDto.getUsername(), mailDto.getPassword()); logger.debug("Store: " + store); logger.debug("Username: " + mailDto.getUsername()); logger.debug("Password: " + mailDto.getPassword()); // Instantiate a message Message msg = new MimeMessage(session); // Set message attributes msg.setFrom(new InternetAddress(from)); InternetAddress[] address = { new InternetAddress(to) }; msg.setRecipients(Message.RecipientType.TO, address); msg.setSubject("Error with segmenting c32 Document"); msg.setSentDate(new Date()); msg.setText(message); Folder[] f = store.getDefaultFolder().list(); for (Folder fd : f) { logger.debug(">> " + fd.getName()); // Store message in sent folder if (fd.getName().equals("INBOX")) { fd.appendMessages(new Message[] { msg }); } } // Send the message // Transport.send(msg); } catch (MessagingException mex) { // Prints all nested (chained) exceptions as well mex.printStackTrace(); } } public String getErrorMessage() { return errorMessage; } public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } }