欢迎光临
我们一直在努力

阿里云服务器通过JavaMail发送邮箱STMP问题25端口被禁用使用SSL协议465端口

1 问题描述

我们传统使用的比较简单的是 STMP 25端口收发邮件

今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件

开始在网上有说发现是JDK1.8的原因,然后自己也把JDK1.8换到了JDK1.7 还是不行,所以这里排除了JDK的原因。

那么问题来了,是否25端口不能连接适用喃?

然后在终端输入命令行 ,可测试25端口是否可连接。

telnet smtp.163.com 25 

 

阿里云服务器通过JavaMail发送邮箱STMP问题25端口被禁用使用SSL协议465端口

返回成功 说明你的服务器 是没有封掉25端口的。上面的图是我自己的电脑,当然能连通。

当换到服务器测试的时候 就会出现一只连接不成功 

阿里云服务器通过JavaMail发送邮箱STMP问题25端口被禁用使用SSL协议465端口

找了很久的问题,突然在阿里云客服社区发现一个帖子,当中有客服的解释,当然我不是第一个遇到这个问题的人。

那么客服的解释一下就说明的问题:好像是将25端口封掉了 时间是2016年9月底以后新购买的服务器。

阿里云服务器通过JavaMail发送邮箱STMP问题25端口被禁用使用SSL协议465端口

2 问题解决

那么问题找到了 那就需要将25端口换到465端口 采用SSL协议传输邮件。

好了贴代码时间到:

下面这段代码是采用SSL协议发送邮件,可向多人单人发送邮件

public static boolean sslSend(MessageInfo msg1, EmailAccount emailAccount) throws AddressException, MessagingException, IOException{ Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; // Get a Properties object Properties props = new Properties(); props.setProperty("mail.smtp.host", emailAccount.getPlace()); 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.put("mail.smtp.auth", "true"); final String username = emailAccount.getUsername(); final String password = emailAccount.getPassword(); Session session = Session.getDefaultInstance(props, new Authenticator(){ protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); }}); Message msg = new MimeMessage(session); // 设置发件人和收件人 msg.setFrom(new InternetAddress(emailAccount.getUsername())); List<String> tos = msg1.getTo(); Address to[] = new InternetAddress[tos.size()]; for(int i=0;i<tos.size();i++){ to[i] = new InternetAddress(tos.get(i)); } // 多个收件人地址  msg.setRecipients(Message.RecipientType.TO, to); msg.setSubject(msg1.getSubject()); // 标题 msg.setText(msg1.getMsg());// 内容 msg.setSentDate(new Date()); Transport.send(msg); System.out.println("EmailUtil ssl协议邮件发送打印" +msg.toString()); return true; }

 

EmailAccout 字段

// 邮箱用户 private String username; // 邮箱密码 private String password; // 邮箱服务器 private String place;

 

MessageInfo 字段

@NameCN("发件人地址") private String from; @NameCN("收件人地址") private List<String> to; @NameCN("发送时间") private Date sendDate; @NameCN("邮件主题") private String subject; @NameCN("消息正文") private String msg; 

 

将需要的信息,写入这两个Bean,传入最上面的方法即可 使用。

 

下面是25端口 非SSl协议传输代码块

public void doSend(MessageInfo msg, EmailAccount emailAccount) { SimpleMailMessage simpleMailMessage = new SimpleMailMessage(); simpleMailMessage.setFrom(msg.getFrom());// 设置发送者地址 List<String> tos = msg.getTo(); String to[] = new String[tos.size()]; tos.toArray(to); simpleMailMessage.setTo(to);// 设置接受者地址,可多个  simpleMailMessage.setSubject(msg.getSubject()); simpleMailMessage.setSentDate(msg.getSendDate()); simpleMailMessage.setText(msg.getMsg()); simpleMailMessage.setFrom(emailAccount.getUsername()); System.out.println("EmailUtil 邮件发送打印 1111" + simpleMailMessage.toString()); JavaMailSenderImpl s = new JavaMailSenderImpl(); s.setHost(emailAccount.getPlace()); // s.setPort(25);  s.setUsername(emailAccount.getUsername()); s.setPassword(emailAccount.getPassword()); s.send(simpleMailMessage); }

 

这是参考的引入

import java.io.IOException; import java.security.Security; import java.util.Date; import java.util.List; import java.util.Properties; import javax.mail.Address; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import 项目包名.MessageInfo; import 项目包名.EmailAccount;

 

javamail是spring里的javamail jar包。

 

OK当我们使用465端口SSL协议的时候,顺利的在服务器上发出邮件了。

 

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《阿里云服务器通过JavaMail发送邮箱STMP问题25端口被禁用使用SSL协议465端口》
文章链接:https://www.456zj.com/4122.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址