SMTP协议
(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由他来控制信件的中转方式,他帮助每台计算机在发送或中转信件时找到下一个目的地。
POP3协议Post Office Protocol – Version 3即邮局协议版本3。
本人用的是QQ的,需要在开启POP3/SMTP服务。
设置-》账号-》POP3/SMTP服务 开启,即可得到一个授权码,代码中需要的。具体参考:
https://blog.csdn.net/chwshuang/article/details/54344317
添加maven依赖包:
<!-- 邮件 -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
public class EmailUtils {
/**
* 邮箱服务器用户名
*/
private static final String USER = "******";
/**
* 邮箱服务器授权码
*/
private static final String PASSWORD = "****";
public static void main(String[] args) {
sendEmail("***@qq.com", "****@ucpaas.com", "测试", "hello");
}
/**
* 发送邮件
*
* @param fromAddress
* 发送者邮箱地址
* @param receiveAddress
* 接收方邮箱地址
* @param subject
* 主题
* @param content
* 内容
*/
private static void sendEmail(String fromAddress, String receiveAddress, String subject, String content) {
try {
Session session = createSession();
Transport ts = session.getTransport();
// 连接邮件服务器:邮箱类型,帐号,授权码代替密码(更安全)
ts.connect("smtp.qq.com", USER, PASSWORD);
// 创建邮件
MimeMessage mimeMessage = createMineMessage(session, fromAddress, receiveAddress, subject, content);
// 发送邮件
ts.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
ts.close();
} catch (GeneralSecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
/**
* 创建邮件
*
* @param session
* @param fromAddress
* 发送方邮箱地址
* @param receiveAddress
* 接收方邮件地址
* @param subject
* 邮件主题
* @param content
* 邮件内容
* @return
* @throws AddressException
* @throws MessagingException
*/
private static MimeMessage createMineMessage(Session session, String fromAddress, String receiveAddress,
String subject, String content) throws AddressException, MessagingException {
// 创建邮件对象
MimeMessage message = new MimeMessage(session);
// 指明邮件的发件人
message.setFrom(new InternetAddress(fromAddress));
// 指明邮件的收件人,
message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiveAddress));
// 邮件的标题
message.setSubject(subject);
// 邮件的文本内容
message.setContent(content, "text/html;charset=UTF-8");
// 返回创建好的邮件对象
return message;
}
/**
* 创建会话
*
* @return
* @throws GeneralSecurityException
*/
private static Session createSession() throws GeneralSecurityException {
Properties prop = new Properties();
// 开启debug调试,以便在控制台查看
prop.setProperty("mail.debug", "true");
// 设置邮件服务器主机名
prop.setProperty("mail.host", "smtp.qq.com");
// 发送服务器需要身份验证
prop.setProperty("mail.smtp.auth", "true");
// 发送邮件协议名称
prop.setProperty("mail.transport.protocol", "smtp");
// 开启SSL加密,否则会失败
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);
// 创建session
return Session.getInstance(prop);
}
}
参考文章:
https://www.cnblogs.com/xyzq/p/5704358.html
遇到的问题:
1 RSA premaster secret error: SunTls12RsaPremasterSecret KeyGenerator not available
原因:jdk中jar包有问题,
解决方案:https://my.oschina.net/weiweiblog/blog/1615166