1、报错信息如下:
trying to connect to host "smtp.163.com", port 465, isSSL true
javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 465;
nested exception is:
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
at javax.mail.Service.connect(Service.java:295)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:196)
at com.xnpool.smsServer.Tools.SendEmailUtils.sendEmail(SendEmailUtils.java:66)
at com.xnpool.smsServer.controller.sms.SmsCodeServicerApi.sendEmail(SmsCodeServicerApi.java:151)
at sun.reflect.GeneratedMethodAccessor109.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2、代码
public class SendEmailRequest {
/**
* 接收地址
*/
private String email;
/**
* 邮件标题
*/
private String title;
/**
* 邮件内容
*/
private String content;
/**
* 主机地址
* smtp.163.com
* smtp.qq.com
*/
private String host;
/**
* 发送地址
*/
private String from;
/**
* 秘钥
*/
private String secrect;
}
@Slf4j
public class SendEmailUtils {
public static void sendEmail(SendEmailRequest request) {
try {
log.info(log.getName() + " 发送邮件请求参数【{}】", JSONObject.toJSONString(request));
Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp");// 连接协议
properties.put("mail.smtp.host", request.getHost());// 163主机名
properties.put("mail.smtp.port", 465);// 端口号
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.ssl.enable", "true");//设置是否使用ssl安全连接 ---一般都使用
properties.put("mail.debug", "true");//设置是否显示debug信息 true 会在控制台显示相关信息
//得到回话对象
Session session = Session.getInstance(properties);
// 获取邮件对象
Message message = new MimeMessage(session);
//设置发件人邮箱地址
message.setFrom(new InternetAddress(request.getFrom()));
//设置收件人地址
message.setRecipients(MimeMessage.RecipientType.TO, new InternetAddress[]{new InternetAddress(request.getEmail())});
//抄送自己
message.addRecipients(Message.RecipientType.CC, InternetAddress.parse(request.getFrom()));
//设置邮件标题
message.setSubject(request.getTitle());
//设置邮件内容
message.setText(request.getContent());
//得到邮差对象
Transport transport = session.getTransport();
//连接自己的邮箱账户
transport.connect(request.getFrom(), request.getSecrect());//密码为刚才得到的授权码
//发送邮件
transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch (Exception e) {
e.printStackTrace();
}
log.info(log.getName() + " 发送邮件发送成功【{}】", JSONObject.toJSONString(request));
}
}
3、问题解决
发现自己的邮箱设置:MAP/POP3 都已经开启,且都已经增加了授权码还报错,那就是正式环境JDK 的验证问题
which java
ls -lrt /usr/bin/java
ls -lrt /etc/alternatives/java
找到目录
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security
修改java.security:不要SSL3,TLSv1, TLSv1.1
# dk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
jdk.tls.disabledAlgorithms=RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
include jdk.disabled.namedCurves
重启JAVA程序