Javamail是Java官方提供的集成api,用起来很方便。引用jar包,导入工具类,配置好自己邮件发送方的邮箱设置,就可以使用了。
pom文件引入
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-email -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.4</version>
</dependency>
发送的工具类:
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Created by yanyl on 2018/1/23.
*/
public class MailUtil {
private static Logger logger = LoggerFactory.getLogger("MailUtil");
/**
*
* @param smtp 邮件服务器地址
* @param sender 发送方邮箱
* @param receiver 接收方邮箱
* @param password 发送方密码,如果报错用客户端授权密码
* @param subject 发送邮箱的主题
* @param message 发送的邮件内容
* @return
*/
public static boolean send(String smtp,String sender,String receiver,String password,String subject,String message) {
// 发送email
HtmlEmail email = new HtmlEmail();
try {
// 这里是SMTP发送服务器的名字:163的如下:"smtp.163.com",qq:smtp.qq.com
email.setHostName(smtp);
// 字符编码集的设置
email.setCharset("UTF-8");
// 发送人的邮箱
email.setFrom(sender);
// 收件人的邮箱
email.addTo(receiver);
// 如果需要认证信息的话,设置认证:用户名-密码。分别为发件人在邮件服务器上的注册名称和密码
email.setAuthentication(sender, password);
// 要发送的邮件主题
email.setSubject(subject);
// 要发送的信息,由于使用了HtmlEmail,可以在邮件内容中使用HTML标签
email.setMsg(message);
// 发送
email.send();
if (logger.isDebugEnabled()) {
logger.debug(sender + " 发送邮件到 " + receiver);
}
return true;
} catch (EmailException e) {
e.printStackTrace();
logger.info(sender + " 发送邮件到 " + receiver
+ " 失败");
return false;
}
}
}
只要引用jar包,再使用这个工具类就可以了,代码很简单,可以自己试试。
可能遇到的问题:535 Error: authentication failed
org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.163.com:25
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1410)
at org.apache.commons.mail.Email.send(Email.java:1437)
at cn.usi.zhjt.pay.util.MailUtil.send(MailUtil.java:28)
at cn.usi.zhjt.pay.service.quartz.QuartzJob.doJob(QuartzJob.java:532)
at com.xxl.job.executor.service.jobhandler.QuartzJobHandler.execute(QuartzJobHandler.java:35)
at com.xxl.job.core.router.thread.JobThread.run(JobThread.java:83)
Caused by: javax.mail.AuthenticationFailedException: 535 Error: authentication failed
at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826)
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685)
at javax.mail.Service.connect(Service.java:317)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1400)
... 5 more
我用的是163邮箱,免费,邮件发送失败,报这个错误,重新检查了邮箱的设置。首先要开通pop3/SMTP权限,然后生成客户端授权码。邮件发送失败,原因是我使用了邮箱密码发送,而在此时,是需要使用授权码的。
如果使用QQ邮箱,也类似,邮箱设置--账户里面,开通POP3/SMTP权限,生成授权码。
需要注意的是,如果你们的服务器有防火墙,需要对邮件服务器的ip、端口号开出权限。
我写的比较简单,这个博客介绍挺详细的http://blog.csdn.net/xietansheng/article/details/51673073