1.添加jar包
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.5</version>
</dependency>
2.发送代码
public class EmailUtils {
/**
* https://www.cnblogs.com/jimboi/p/6406237.html
* 纯文本内容邮件
*/
public static void sendEmail(String emailSender,String emailSenderPassword,String subject,String emailReceiver,String content) throws EmailException {
Email email = new SimpleEmail();
email.setHostName("smtp.qq.com");
//密码是腾讯生成的第三方验证码 ascxdfbgztavbdlab
email.setAuthentication(emailSender,emailSenderPassword);
email.setFrom(emailSender);
email.addTo(emailReceiver);
email.setSubject(subject);
//恭喜您注册自媒体号审核通过了,点击如下链接登录: <a href="http://www.baidu.com">xx电视台自媒体登录平台</a>
email.setContent(content,"text/html;charset=UTF-8");
email.send();
}
3.测试代码
public static void main(String[] args) {
try {
EmailUtils.sendEmail("[email protected]","ascxdfbgztavblab","审核通过","[email protected]","恭喜您注册自媒体号审核通过了,点击如下链接登录: <a href=\"http://baidu,com">xx电视台自媒体登录平台</a>");
} catch (EmailException e) {
e.printStackTrace();
}
}
4.如上去25端口发送邮件,在本地测试可以通过。当打到线上环境时,发现报错了。
后来经排查发现,我们用的线上环境是阿里云,阿里云将 25端口封闭了。继续查找资料,发现腾讯邮箱支持465端口,需要设置ssl。不多说,代码如下。
public class EmailUtils {
/**
* https://www.cnblogs.com/jimboi/p/6406237.html
* https://www.cnblogs.com/15ho/p/5891148.html
* 纯文本内容邮件
*/
public static void sendEmail(EmailVO emailVO) throws EmailException, MessagingException {
//设置ssl连接
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
Properties props = System.getProperties();
props.setProperty("mail.smtp.host", "smtp.qq.com");
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
props.setProperty("mail.smtp.auth", "true");
//建立邮件会话
Session session = Session.getInstance(props, new Authenticator() {
//身份认证
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(emailVO.getEmailSender(),emailVO.getEmailSenderPassword());
}
});
//建立邮件对象
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(emailVO.getEmailSender()));
message.setRecipients(Message.RecipientType.TO, emailVO.getEmailReceiver());
message.setSubject(emailVO.getSubject());
message.setContent(emailVO.getContent(),"text/html;charset=UTF-8");
//发送邮件
Transport.send(message);
}
}
注意:如上邮箱服务器是采用腾讯的。所以发件人必须是腾讯的邮箱。
ps:今天遇到个问题,我用的腾讯的邮箱服务器,账号+授权码采用 网易的,发送邮件始终报535:认证失败。后来才知道邮箱服务器认证只能认证自己家的账号。