阿里云服务器 通过JavaMail发送邮箱STMP问题

本地开发用的是163邮箱的25端口,可以正常发送的

在阿里云服务器上的就会出现javax.mail.MessagingException: Could not connect to SMTP host的错误,基本可以定位这是端口的问题

然后在163邮箱帮助那里查到,邮箱的SMTP端口有分两种的:SSL协议和非SSL协议

阿里云服务器为了安全起见,一般是禁用非SSL协议的25端口,

所以改用SSL协议的端口可以发送,博主是改为994端口的,

改为SSL协议端口后,本地测试依然是出现上面那个错误的,因为端口是SSL协议的端口,但是邮件传输的设置没有按照SSL协议进行传输,所以还是发送不了的

所以要在邮件传输配置上加上

mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

贴上代码直观

package com.dne.sinosig.core.util;
/**
 *  发送邮件的基本信息
 * */
import java.util.Properties;

public class MailSenderInfo {
	// 发送邮件的服务器的IP和端口    
    private String mailServerHost;
    private String mailServerPort = "994";
    // 邮件发送者的地址    
    private String fromAddress;
    // 邮件接收者的地址    
    private String toAddress;    
    // 登陆邮件发送服务器的用户名和密码    
    private String userName;
    private String password;
    // 是否需要身份验证    
    private boolean validate = false;
    // 邮件主题    
    private String subject;    
    // 邮件的文本内容    
    private String content;    
    // 邮件附件的文件名    
    private String[] attachFileNames;      
    /** *//**   
      * 获得邮件会话属性   
      */    
    public Properties getProperties(){    
      Properties p = new Properties();    
      p.put("mail.smtp.host", this.mailServerHost);    
      p.put("mail.smtp.port", this.mailServerPort);
      p.put("mail.smtp.auth", validate ? "true" : "false");//是否需要开启邮箱验证
      p.put("mail.smtp.timeout",10000);//时间延迟
      p.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");//设置为SSL协议
      return p;    
    }    
    public String getMailServerHost() {    
      return mailServerHost;    
    }    
    public void setMailServerHost(String mailServerHost) {    
      this.mailServerHost = mailServerHost;    
    }   
    public String getMailServerPort() {    
      return mailServerPort;    
    }   
    public void setMailServerPort(String mailServerPort) {    
      this.mailServerPort = mailServerPort;    
    }   
    public boolean isValidate() {    
      return validate;    
    }   
    public void setValidate(boolean validate) {    
      this.validate = validate;    
    }   
    public String[] getAttachFileNames() {    
      return attachFileNames;    
    }   
    public void setAttachFileNames(String[] fileNames) {    
      this.attachFileNames = fileNames;    
    }   
    public String getFromAddress() {    
      return fromAddress;    
    }    
    public void setFromAddress(String fromAddress) {    
      this.fromAddress = fromAddress;    
    }   
    public String getPassword() {    
      return password;    
    }   
    public void setPassword(String password) {    
      this.password = password;    
    }   
    public String getToAddress() {    
      return toAddress;    
    }    
    public void setToAddress(String toAddress) {    
      this.toAddress = toAddress;    
    }    
    public String getUserName() {    
      return userName;    
    }   
    public void setUserName(String userName) {    
      this.userName = userName;    
    }   
    public String getSubject() {    
      return subject;    
    }   
    public void setSubject(String subject) {    
      this.subject = subject;    
    }   
    public String getContent() {    
      return content;    
    }   
    public void setContent(String textContent) {    
      this.content = textContent;    
    }    

}

这样就大功告成了

最后如果换回非SSL协议的端口,则是需要去除上面的这个SSL协议的配置的

不然会出现javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值