阅读 248

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

章节目录

  • 1 问题描述

  • 2 问题解决

1 问题描述

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

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

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

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

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

telnet smtp.163.com 25

 

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

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

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

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

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协议的时候,顺利的在服务器上发出邮件了。

 来源:https://www.cnblogs.com/loveincode/p/6476358.html


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐