懒得说了,直接上代码
依赖
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.3</version>
</dependency>
还有spring的4个基础核心包
核心代码
package com.noryar.common.utils;
import java.io.File;
import java.util.Date;
import java.util.Properties;
import javax.activation.FileDataSource;
import javax.mail.internet.MimeMessage;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
/**
* 系统发送邮件类.<br>
* 邮件内容需要封装在EmailDTO中,该工具类使用方式案例:<br>
* Emailer.getEmailer.sendSimpleEmail(EmailDTO emailDTO);或者Emailer.getEmailer.sendMineEmail(EmailDTO emailDTO);
* @author Administrator
*
*/
public class Emailer {
private static Logger logger = LoggerFactory.getLogger(Emailer.class);
/**
*实例化SimpleMailMessage.
*/
private SimpleMailMessage smm = null;
/**
*实例化MailSender.
*/
private JavaMailSender jms = null;
public Emailer(final EmailDTO emailDTO) {
String host = emailDTO.getHost();
String from = emailDTO.getUsername();
String password = emailDTO.getPassword();
if(StringUtils.isBlank(host)||StringUtils.isBlank(from)||StringUtils.isBlank(password)){
throw new RuntimeException("邮箱未正确定义");
}else{
String username = from.substring(0, from.indexOf("@"));
smm = new SimpleMailMessage();
smm.setFrom(from);
JavaMailSenderImpl impl = new JavaMailSenderImpl();
impl.setDefaultEncoding("UTF-8");
impl.setHost(host);
impl.setUsername(username);
impl.setPassword(password);
Properties prop = new Properties();
prop.put("mail.smtp.auth", true);
prop.put("mail.debug", true);
impl.setJavaMailProperties(prop);
jms = impl;
}
}
/**
* 发送普通text邮件.
* @param emailDTO emailDTO
* @return String
* @throws Exception e.
*/
public boolean sendSimpleEmail(final EmailDTO emailDTO)throws Exception {
//发送者
smm.setTo(emailDTO.getToAddress());
//标题
smm.setSubject(emailDTO.getSubject());
//内容
smm.setText(emailDTO.getText());
//发送
jms.send(smm);
return true;
}
/**
* 发送内嵌html邮件.
* @param emailDTO emailDTO
* @return boolean
* @throws Exception e.
*/
public boolean sendMineEmail(final EmailDTO emailDTO)throws Exception {
MimeMessage mime = jms.createMimeMessage();
MimeMessageHelper mimehelper = new MimeMessageHelper(mime, true);
//设置发送人
mimehelper.setFrom(smm.getFrom());
//设置收件人
mimehelper.setTo(emailDTO.getToAddress());
//设置发送日期
mimehelper.setSentDate(new Date());
//设置主题
mimehelper.setSubject(emailDTO.getSubject());
//设置邮件内容为HTML超文本格式
mimehelper.setText(emailDTO.getText(), true);
// 邮件附件
File[] files = emailDTO.getFiles();
if(null != files && files.length>=1){
for (File file : files) {
if(!file.exists()){
throw new RuntimeException("邮件发送失败,附件:【"+file.getName()+"】不存在");
}
mimehelper.addAttachment(file.getName(), new FileDataSource(file));
}
}
//将邮件发送
jms.send(mime);
return true;
}
/**
* 群发普通text文件.
* @param emailDTO emailDTO
* @return 成功与否
* @throws Exception 异常
*/
public boolean sendAllSimpleEmail(final EmailDTO emailDTO) throws Exception{
String[] tos = emailDTO.getToAllAddress();
if(null == tos || tos.length == 0){
return false;
}
String back = emailDTO.getToAddress();
for (String to : tos) {
emailDTO.setToAddress(to);
if(!sendSimpleEmail(emailDTO)){
logger.info("发送给:【"+to+"】失败。");
}
}
emailDTO.setToAddress(back);
return true;
}
/**
* 群发内嵌html邮件.
* @param emailDTO emailDTO
* @return 成功与否
* @throws Exception 异常
*/
public boolean sendAllMineEmail(final EmailDTO emailDTO) throws Exception{
String[] tos = emailDTO.getToAllAddress();
if(null == tos || tos.length == 0){
return false;
}
String back = emailDTO.getToAddress();
for (String to : tos) {
emailDTO.setToAddress(to);
if(!sendMineEmail(emailDTO)){
logger.info("发送给:【"+to+"】失败。");
}
}
emailDTO.setToAddress(back);
return true;
}
}
DTO实体
package com.noryar.common.utils;
import java.io.File;
/**
* emailDTO.
* @author Administrator
*
*/
public class EmailDTO implements java.io.Serializable {
/**
* .
*/
private static final long serialVersionUID = -3903692662228924615L;
/**
* 发送邮箱协议地址.
*/
private String host;
/**
* 发送邮箱账户.
*/
private String username;
/**
* 邮箱密码.
*/
private String password;
/**
* 接收地址.
*/
private String toAddress;
/**
* 群发接收地址.
*/
private String[] toAllAddress;
/**
* 邮件名.
*/
private String subject;
/**
* 邮件内容.
*/
private String text;
/**
* 邮件附件.
*/
private File[] files;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
/**
* .
* @return toAddress.
*/
public String getToAddress() {
return toAddress;
}
/**
* .
* @param toAddress toAddress.
*/
public void setToAddress(final String toAddress) {
this.toAddress = toAddress;
}
public String[] getToAllAddress() {
return toAllAddress;
}
public void setToAllAddress(String[] toAllAddress) {
this.toAllAddress = toAllAddress;
}
/**
* .
* @return subject.
*/
public String getSubject() {
return subject;
}
/**
* .
* @param subject subject.
*/
public void setSubject(final String subject) {
this.subject = subject;
}
/**
* .
* @return text.
*/
public String getText() {
return text;
}
/**
* .
* @param text text.
*/
public void setText(final String text) {
this.text = text;
}
public File[] getFiles() {
return files;
}
public void setFiles(File[] files) {
this.files = files;
}
}
使用方式
1. 使用说明:
1. EmailDTO
参数:host 发件人邮箱协议地址,类型String
参数:username 发件人邮箱账户,类型String
参数:password 发件人邮箱密码,类型String
参数:toAddress 收件人地址,类型String
参数:toAllAddress 群发收件人地址,类型String[]
参数:subject 邮件主题,类型String
参数:text 邮件内容,类型String
参数:files 邮件附件,类型java.io.File[]
2. Emailer
方法:getEmailer 获取邮件发送器
方法:sendSimpleEmail 发送文本邮件,参数:EmailDTO
方法:sendMineEmail 发送内嵌html的邮件,参数:EmailDTO
方法:sendAllSimpleEmail 群发文本邮件,参数EmailDTO
方法:sendAllMineEmail 群发内嵌html的邮件,参数EmailDTO
3. 案例
EmailDTOemailDTO = new EmailDTO();
emailDTO.setHost(“smtp.gmail.com”);
emailDTO.setUsername(“xxx@gmail.com”);
emailDTO.setPassword(“密码…”);
emailDTO.setSubject("主题");
emailDTO.setText("你好");
emailDTO.setToAddress("邮箱号");
new Emailer(emailDTO).sendSimpleEmail(emailDTO);
注意,如果邮件带有附件,请使用sendMineEmail方法或sendAllMineEmail方法
常见错误
550
如果邮箱报550错误,user not permission,说明邮箱需要进行第三方授权,对于126邮箱或163邮箱来说
首先登入网页客户端
然后设置,授权第三方,设置授权密码,最后以授权密码进行代码开发
535
530 ssl
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);