首先需要pom中引入java mail
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>
1、邮件发送需要的常量定义
package cn.com.mail; /** * 邮件发送需要的常量定义 * * @Description: TODO * @author wenminggao * @date 2015年6月2日 下午2:55:39 * */ public class EmailConst { /** 常见的邮件发送协议地址 **/ public static final String SMTP_QQ = "smtp.qq.com"; public static final String SMTP_163 = "smtp.163.com"; public static final String SMTP_126 = "smtp.126.com"; public static final String SMTP_SINA = "smtp.sina.com"; public static final String SMTP_GMAIL = "smtp.gmail.com"; }
2、邮件发送处理工具类
package cn.com.mail; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; /** * 邮件发送处理工具类 * * @Description: TODO * @author wenminggao * @date 2015年6月2日 下午2:55:50 * */ public class EmailHandle { /** 邮件对象 **/ private MimeMessage mimeMsg; /** 发送邮件的Session会话 **/ private Session session; /** 邮件发送时的一些配置信息的一个属性对象 **/ private Properties props; /** 发件人的用户名 **/ private String sendUserName; /** 发件人密码 **/ private String sendUserPass; /** 附件添加的组件 **/ private Multipart mp; /** 存放附件文件 **/ private List<FileDataSource> files = new LinkedList<FileDataSource>(); public EmailHandle(String smtp) { sendUserName = ""; sendUserPass = ""; setSmtpHost(smtp); createMimeMessage(); } private void setSmtpHost(String hostName) { if (props == null) { props = System.getProperties(); } props.put("mail.smtp.host", hostName); } public boolean createMimeMessage() { try { /** 用props对象来创建并初始化session对象 **/ session = Session.getDefaultInstance(props, null); /** 用session对象来创建并初始化邮件对象 **/ mimeMsg = new MimeMessage(session); /** 生成附件组件的实例 **/ mp = new MimeMultipart(); return true; } catch (Exception e) { System.err.println("获取邮件会话对象时发生错误!" + e); return false; } } /** * 设置SMTP的身份认证 */ public void setNeedAuth(boolean need) { if (props == null) { props = System.getProperties(); } if (need) { props.put("mail.smtp.auth", "true"); } else { props.put("mail.smtp.auth", "false"); } } /** * 进行用户身份验证时,设置用户名和密码 */ public void setNamePass(String name, String pass) { sendUserName = name; sendUserPass = pass; } /** * 设置邮件主题 * * @param mailSubject * @return */ public boolean setSubject(String mailSubject) { try { mimeMsg.setSubject(mailSubject); return true; } catch (Exception e) { return false; } } /** * 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8 * * @param mailBody * @return */ public boolean setBody(String mailBody) { try { BodyPart bp = new MimeBodyPart(); bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>" + mailBody, "text/html;charset=UTF-8"); /** 在组件上添加邮件文本 **/ mp.addBodyPart(bp); } catch (Exception e) { System.err.println("设置邮件正文时发生错误!" + e); return false; } return true; } /** * 增加发送附件 * * @param filename * 邮件附件的地址,只能是本机地址而不能是网络地址,否则抛出异常 * @return */ public boolean addFileAffix(String filename) { try { BodyPart bp = new MimeBodyPart(); FileDataSource fileds = new FileDataSource(filename); bp.setDataHandler(new DataHandler(fileds)); /** 解决附件名称乱码 **/ bp.setFileName(MimeUtility.encodeText(fileds.getName(), "UTF-8", null)); /** 添加附件 **/ mp.addBodyPart(bp); files.add(fileds); return true; } catch (Exception e) { System.err.println("增加邮件附件<" + filename + ">时发生错误:" + e); return false; } } /** * 删除添加的附件 * * @return */ public boolean delFileAffix() { try { FileDataSource fileds = null; for (Iterator<FileDataSource> it = files.iterator(); it.hasNext();) { fileds = it.next(); if (fileds != null && fileds.getFile() != null) { fileds.getFile().delete(); } } return true; } catch (Exception e) { System.err.println("删除邮件附件发生错误:" + e); return false; } } /** * 设置发件人地址 * * @param from * 发件人地址 * @return */ public boolean setFrom(String from) { try { mimeMsg.setFrom(new InternetAddress(from)); return true; } catch (Exception e) { return false; } } /** * 设置收件人地址 * * @param to收件人的地址 * @return */ public boolean setTo(String to) { try { if (to == null) { return false; } mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); return true; } catch (Exception e) { return false; } } /** * 发送抄送 * * @param copyto * @return */ public boolean setCopyTo(String copyto) { try { if (copyto == null) { return false; } mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC, InternetAddress.parse(copyto)); return true; } catch (Exception e) { return false; } } /** * 发送邮件 * * @return */ public boolean sendEmail() throws Exception { System.out.println("正在发送邮件...."); mimeMsg.setContent(mp); mimeMsg.saveChanges(); Session mailSession = Session.getInstance(props, null); Transport transport = mailSession.getTransport("smtp"); /** 连接邮件服务器并进行身份验证 **/ transport.connect((String) props.get("mail.smtp.host"), sendUserName, sendUserPass); /** 发送邮件 **/ transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO)); transport.close(); System.out.println("发送邮件成功!"); return true; } }
3、邮件发送工具类
package cn.com.mail; import java.util.List; /** * 邮件发送工具类 * * @Description: TODO * @author wenminggao * @date 2015年6月2日 下午2:56:09 * */ public class EmailUtils { /** * 发送邮件 * * @param smtp * 邮件协议 * @param fromAddress * 发送人地址 * @param fromPass * 发送人密码 * @param toaddress * 收件人地址 * @param subject * 发送主题 * @param content * 发送内容 * @throws Exception */ public static void send(String smtp, String fromAddress, String fromPass, String toAddress, String subject, String content) { try { System.out.println("开始向" + toAddress + "发送邮件"); EmailHandle emailHandle = new EmailHandle(smtp); emailHandle.setFrom(fromAddress); emailHandle.setNeedAuth(true); emailHandle.setSubject(subject); emailHandle.setBody(content); emailHandle.setTo(toAddress); emailHandle.setFrom(fromAddress); emailHandle.setNamePass(fromAddress, fromPass); emailHandle.sendEmail(); System.out.println("邮件发送结束!"); } catch (Exception e) { e.printStackTrace(); } } /** * 发送邮件 * * @param smtp * 邮件协议 * @param fromAddress * 发送人地址 * @param fromPass * 发送人密码 * @param toAddress * 收件人地址 * @param ccAdress * 抄送人地址 * @param subject * 发送主题 * @param content * 发送内容 * @throws Exception */ public static void send(String smtp, String fromAddress, String fromPass, String toAddress, String ccAdress, String subject, String content) { try { System.out.println("开始向" + toAddress + "发送邮件"); EmailHandle emailHandle = new EmailHandle(smtp); emailHandle.setFrom(fromAddress); emailHandle.setNeedAuth(true); emailHandle.setSubject(subject); emailHandle.setBody(content); emailHandle.setTo(toAddress); /** 添加抄送 **/ if (!"".equals(ccAdress) && ccAdress != null) { emailHandle.setCopyTo(ccAdress); } emailHandle.setFrom(fromAddress); emailHandle.setNamePass(fromAddress, fromPass); emailHandle.sendEmail(); System.out.println("邮件发送结束!"); } catch (Exception e) { e.printStackTrace(); } } /** * 发送邮件 * * @param smtp * 邮件协议 * @param fromAddress * 发送人地址 * @param fromPass * 发送人密码 * @param toaddress * 收件人地址 * @param subject * 发送主题 * @param content * 发送内容 * @throws Exception */ public static void send(String smtp, String fromAddress, String fromPass, String toAddress, String subject, String content, List<String> fileList) { try { System.out.println("开始向" + toAddress + "发送邮件"); EmailHandle emailHandle = new EmailHandle(smtp); emailHandle.setFrom(fromAddress); emailHandle.setNeedAuth(true); emailHandle.setSubject(subject); emailHandle.setBody(content); emailHandle.setTo(toAddress); emailHandle.setFrom(fromAddress); emailHandle.setNamePass(fromAddress, fromPass); /** 附件文件路径 **/ for (String file : fileList) { emailHandle.addFileAffix(file); } emailHandle.sendEmail(); System.out.println("邮件发送结束!"); } catch (Exception e) { e.printStackTrace(); } } /** * 发送邮件 * * @param smtp * 邮件协议 * @param fromAddress * 发送人地址 * @param fromPass * 发送人密码 * @param toAddress * 收件人地址 * @param ccAdress * 抄送人地址 * @param subject * 发送主题 * @param content * 发送内容 * @throws Exception */ public static void send(String smtp, String fromAddress, String fromPass, String toAddress, String ccAdress, String subject, String content, List<String> fileList) { try { System.out.println("开始向" + toAddress + "发送邮件"); EmailHandle emailHandle = new EmailHandle(smtp); emailHandle.setFrom(fromAddress); emailHandle.setNeedAuth(true); emailHandle.setSubject(subject); emailHandle.setBody(content); emailHandle.setTo(toAddress); /** 添加抄送 **/ if (!"".equals(ccAdress) && ccAdress != null) { emailHandle.setCopyTo(ccAdress); } emailHandle.setFrom(fromAddress); emailHandle.setNamePass(fromAddress, fromPass); /** 附件文件路径 **/ for (String file : fileList) { emailHandle.addFileAffix(file); } emailHandle.sendEmail(); System.out.println("邮件发送结束!"); } catch (Exception e) { e.printStackTrace(); } } }
测试代码:
package cn.com.test; import cn.com.mail.EmailConst; import cn.com.mail.EmailUtils; public class TestMail { public static void main(String[] args) { EmailUtils.send(EmailConst.SMTP_163, "[email protected]", "*******", "[email protected]", "测试", "测试邮件"); } }