经过查询原因是因为阿里默认禁掉了25的端口,要申请开放比较麻烦.
解决办法: 使用465端口
需要加红圈中的这行代码
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
private boolean getAddressEmail(MailBody mailInfo) throws Exception{
// 判断是否需要身份认证
MailAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
pro.put("mail.smtp.socketFactory.class", SSL_FACTORY); //SSL的方式发送
if (mailInfo.isValidate()) {
// 如果需要身份认证,则创建一个密码验证器
authenticator = new MailAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
// logBefore(logger, "构造一个发送邮件的session");
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
// Address to = new InternetAddress(mailInfo.getToAddress());
//mailMessage.setRecipient(Message.RecipientType.TO,to);
Address[] to = new InternetAddress().parse(mailInfo.getToAddress()); //这里是发送给多个用户多个用户用都好分割xxx@xx.com,xxx@xx.com
mailMessage.setRecipients(Message.RecipientType.TO,to);
if(!StringUtils.isEmpty(mailInfo.getToccAddress())) {
Address[] tocc = new InternetAddress().parse(mailInfo.getToccAddress()); //这里是发送给多个用户多个用户用都好分割xxx@xx.com,xxx@xx.com
mailMessage.setRecipients(Message.RecipientType.CC,tocc);
}
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date());
// 设置邮件消息的主要内容
String mailContent = mailInfo.getContent();
mailMessage.setText(mailContent);
// 发送邮件
Transport.send(mailMessage);
System.out.println("发送成功!");
return true;
}
注意只需要加如下2行代码才能使用465端口
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
pro.put("mail.smtp.socketFactory.class", SSL_FACTORY); //SSL的方式发送