Java tutorial
/** * Copyright (C) 2012 - 2013, Grass CRM Studio * * 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.gcrm.util.mail; import java.io.File; import java.util.List; import java.util.Properties; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.MimeMessage; import org.springframework.core.task.TaskExecutor; import org.springframework.mail.javamail.MimeMessageHelper; import com.gcrm.domain.EmailSetting; import com.gcrm.service.IBaseService; /** * Mail service */ public class MailService { private TaskExecutor taskExecutor; private IBaseService<EmailSetting> baseService; public void sendSimpleMail(String toAddress) throws Exception { List<EmailSetting> emailSettings = baseService.getAllObjects(EmailSetting.class.getSimpleName()); EmailSetting emailSetting = null; if (emailSettings != null && emailSettings.size() > 0) { emailSetting = emailSettings.get(0); } else { return; } Session mailSession = this.createSmtpSession(emailSetting); if (mailSession != null) { Transport transport = mailSession.getTransport(); MimeMessage msg = new MimeMessage(mailSession); MimeMessageHelper helper = new MimeMessageHelper(msg, true, "utf-8"); helper.setFrom(emailSetting.getFrom_address()); helper.setTo(toAddress); helper.setSubject("Test Mail From " + emailSetting.getFrom_name()); helper.setText("This is test mail from " + emailSetting.getFrom_name(), true); transport.connect(); transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO)); } } public void sendSystemSimpleMail(String toAddress, String subject, String text) throws Exception { List<EmailSetting> emailSettings = baseService.getAllObjects(EmailSetting.class.getSimpleName()); EmailSetting emailSetting = null; if (emailSettings != null && emailSettings.size() > 0) { emailSetting = emailSettings.get(0); } else { return; } Session mailSession = this.createSmtpSession(emailSetting); if (mailSession != null) { Transport transport = mailSession.getTransport(); MimeMessage msg = new MimeMessage(mailSession); MimeMessageHelper helper = new MimeMessageHelper(msg, true, "utf-8"); helper.setFrom(emailSetting.getFrom_address()); helper.setTo(toAddress); helper.setSubject(subject); helper.setText(text, true); transport.connect(); transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO)); } } public void asynSendHtmlMail(final String from, final String[] to, final String subject, final String text, final String[] fileNames, final File[] files) { taskExecutor.execute(new Runnable() { public void run() { try { sendHtmlMail(from, to, subject, text, fileNames, files); } catch (Exception e) { throw new RuntimeException(e); } } }); } public void sendHtmlMail(String from, String[] to, String subject, String text, String[] fileNames, File[] files) throws Exception { List<EmailSetting> emailSettings = baseService.getAllObjects(EmailSetting.class.getSimpleName()); EmailSetting emailSetting = null; if (emailSettings != null && emailSettings.size() > 0) { emailSetting = emailSettings.get(0); } else { return; } if (from == null) { from = emailSetting.getFrom_address(); } Session mailSession = createSmtpSession(emailSetting); if (mailSession != null) { Transport transport = mailSession.getTransport(); MimeMessage msg = new MimeMessage(mailSession); MimeMessageHelper helper = new MimeMessageHelper(msg, true, "utf-8"); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(text, true); if (fileNames != null && files != null) { String fileName = null; File file = null; for (int i = 0; i < fileNames.length; i++) { fileName = fileNames[i]; file = files[i]; if (fileName != null && file != null) { helper.addAttachment(fileName, file); } } } transport.connect(); transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO)); } } private Session createSmtpSession(EmailSetting emailSetting) { final Properties props = new Properties(); int emailProvider = emailSetting.getEmail_provider(); String smtpUsername = null; String smtpPassword = null; switch (emailProvider) { case EmailSetting.PROVIDER_GMAIL: props.setProperty("mail.host", "smtp.gmail.com"); props.setProperty("mail.smtp.auth", "true"); props.setProperty("mail.smtp.port", "" + 587); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.starttls.enable", "true"); smtpUsername = emailSetting.getGmail_address(); smtpPassword = emailSetting.getGmail_password(); break; case EmailSetting.PROVIDER_YAHOO: props.setProperty("mail.host", "smtp.mail.yahoo.com"); props.setProperty("mail.smtp.auth", "true"); props.setProperty("mail.smtp.port", "" + 587); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.starttls.enable", "true"); smtpUsername = emailSetting.getYahoo_mail_ID(); smtpPassword = emailSetting.getYahoo_mail_password(); break; case EmailSetting.PROVIDER_OTHER: props.setProperty("mail.host", emailSetting.getSmtp_server()); props.setProperty("mail.smtp.auth", String.valueOf(emailSetting.isSmtp_authentication())); props.setProperty("mail.smtp.port", "" + emailSetting.getSmtp_port()); smtpUsername = emailSetting.getSmtp_username(); smtpPassword = emailSetting.getSmtp_password(); switch (emailSetting.getSmtp_protocol()) { case EmailSetting.PROTOCOL_SSL: props.setProperty("mail.transport.protocol", "smtps"); break; case EmailSetting.PROTOCOL_TLS: props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.starttls.enable", "true"); break; default: props.setProperty("mail.transport.protocol", "smtp"); break; } break; } final String userName = smtpUsername; final String password = smtpPassword; return Session.getDefaultInstance(props, new javax.mail.Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(userName, password); } }); } /** * @param taskExecutor * the taskExecutor to set */ public void setTaskExecutor(TaskExecutor taskExecutor) { this.taskExecutor = taskExecutor; } /** * @return the baseService */ public IBaseService<EmailSetting> getBaseService() { return baseService; } /** * @param baseService * the baseService to set */ public void setBaseService(IBaseService<EmailSetting> baseService) { this.baseService = baseService; } }