package com.cy.report.utils; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; import org.apache.commons.mail.EmailAttachment; import org.apache.commons.mail.HtmlEmail; import org.apache.commons.mail.MultiPartEmail; import org.apache.commons.mail.SimpleEmail; import com.cy.report.pojo.Email; public class MailUtils { public static final ResourceBundle b = ResourceBundle.getBundle("mail"); public static final String CONTENT_TYPE = b.getString("content_type"); public static final String FROM_EMAIL_ADDRESS = b.getString("username"); /** * 简单的发邮件方式 邮件内容只有标题和邮件内容 支持多个用户批量发送 * * @param subject * 邮件标题 * @param contents * 邮件内容 * @param userEmailAddress * 收入人的邮件地址 为List形式 * @throws Exception */ public static void sendSimpleEmail(String subject, String contents, List<String> userEmailAddress) throws Exception { SimpleEmail email = new SimpleEmail(); email.setHostName(b.getString("host")); email.setAuthentication(FROM_EMAIL_ADDRESS,b.getString("password")); // 发送给多个人 for (int i = 0; i < userEmailAddress.size(); i++) { email.addTo(userEmailAddress.get(i), userEmailAddress.get(i)); } email.setFrom(FROM_EMAIL_ADDRESS, FROM_EMAIL_ADDRESS); email.setSubject(subject); email.setContent(contents, CONTENT_TYPE); email.send(); } /** * 发送带附件的邮件方式 邮件内容有标题和邮件内容和附件,附件可以是本地机器上的文本,也可以是web上的一个URL 文件, * 当为web上的一个URL文件时,此方法可以将WEB中的URL文件先下载到本地,再发送给收入用户 * * @param subject * 邮件标题 * @param contents * 邮件内容 * @param userEmailAddress * 收入人的邮件地址 为List形式 * @param multiPaths * 附件地址 为数组形式 * @throws Exception * @throws Exception */ public static void sendMultiPartEmail(String subject, String contents, List<String> userEmailAddress, String[] multiPaths) throws Exception { // MimeUtility.encodeText(filename); 测试中文乱码用的 // EmailAttachment attachment = new EmailAttachment(); // attachment.setPath("D:/aaa.ppt"); // attachment.setDisposition(EmailAttachment.ATTACHMENT); // attachment.setDescription("Picture of John"); List list = new ArrayList(); // EmailAttachment [] attachmentArray = new // EmailAttachment[multiPaths.length]; for (int j = 0; j < multiPaths.length; j++) { EmailAttachment attachment = new EmailAttachment(); if (multiPaths[j].indexOf("http") == -1) // 判断当前这个文件路径是否在本地 // 如果是:setPath 否则 // setURL; { attachment.setPath(multiPaths[j]); } else { attachment.setURL(new URL(multiPaths[j])); } attachment.setDisposition(EmailAttachment.ATTACHMENT); attachment.setDescription(""); list.add(attachment); } // 发送邮件信息 MultiPartEmail email = new MultiPartEmail(); email.setHostName(b.getString("host")); email.setAuthentication(b.getString("username"),b.getString("password")); // 发送给多个人 for (int i = 0; i < userEmailAddress.size(); i++) { email.addTo(userEmailAddress.get(i), userEmailAddress.get(i)); } email.setFrom(FROM_EMAIL_ADDRESS, FROM_EMAIL_ADDRESS); email.setSubject("The picture"); email.setMsg(contents); // 注意这个不要使用setContent这个方法 setMsg不会出现乱码 for (int a = 0; a < list.size(); a++) // 添加多个附件 { email.attach((EmailAttachment) list.get(a)); } // email.attach(attachment); email.send(); } /** * 发送Html格式的邮件 * * @param subject * 邮件标题 * @param contents * 邮件内容 * @param userEmailAddress * 接收用户的邮箱地址 * @param fromEmailAddress * 发送人的邮箱地址 * * @throws Exception */ public static void sendHtmlEmail(String subject, String contents, List<String> userEmailAddress) throws Exception { HtmlEmail email = new HtmlEmail(); email.setHostName(b.getString("host")); email.setAuthentication(b.getString("username"),b.getString("password")); // 发送给多个人 for (int i = 0; i < userEmailAddress.size(); i++) { email.addTo(userEmailAddress.get(i), userEmailAddress.get(i)); } email.setFrom(FROM_EMAIL_ADDRESS, FROM_EMAIL_ADDRESS); email.setSubject(subject); email.setHtmlMsg(contents); email.setTextMsg(contents); email.send(); } /** * 统一的发送邮件的方法 调用时一定要实例化EmailBean对象 * * @throws Exception * */ public static void sendEmail(Email email) throws Exception { if (email.isHaveMultPaths()) { sendMultiPartEmail(email.getSubject(), email.getContents(), email.getUserEmailAddress(), email.getMultiPaths()); } else { sendSimpleEmail(email.getSubject(), email.getContents(), email.getUserEmailAddress()); } } public static void main(String[] args) { Email email = new Email(); List<String> mailList = new ArrayList<String>(); mailList.add("zhangxinyang@reyun.com"); email.setSubject("mail test"); email.setContents("what's the fuck mail"); email.setUserEmailAddress(mailList); try { sendEmail(email); } catch (Exception e) { e.printStackTrace(); } } }