java本地发送邮件正常,布置在linux上报:Could not connect to SMTP host: smtp.163.com, port: 25

1、错误描述:

java在本机(windows)发送邮件正常,布置在linux上报错误:Could not connect to SMTP host: smtp.163.com, port: 25

2、产生原因:

       ECS基于安全考虑,目前已经禁用25端口

       如果您的程序部署在阿里云ECS服务器上,建议您不勾选SSL时,使用80端口,勾选ssl时,使用465端口

3、解决方法

   1)首先,在linux上启动465端口

   2)代码修改如下:

package cn.j0.app.shuoba.util;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Properties;

/**
 * FileName: SendEmailUtils
 * Author:   作者
 * Date:     2019/1/31 14:58
 * Description: 发送邮件
 */


public class SendEmailUtils {

    public static void sendMail(String email, String emailMsg) throws MessagingException, GeneralSecurityException {
        // 1.创建一个程序与邮件服务器会话对象 Session  解决linux上发送邮件失败问题,需要下面的配置
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        // 设置信任所有的主机
        sf.setTrustAllHosts( true );
        Properties props = new Properties();
        props.setProperty( "mail.transport.protocol", "SMTP" );
        props.setProperty( "mail.host", "smtp.163.com" );
        props.setProperty( "mail.smtp.auth", "true" );// 指定验证为true是否需要身份验证
        props.setProperty( "mail.smtp.ssl.enable", "true" );
        props.put( "mail.smtp.ssl.socketFactory",sf );

        // 创建验证器
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                // 密码验证,第一个参数:邮箱名不包括@163.com,第二个参数:授权码
                return new PasswordAuthentication( "邮箱名不包括@163.com", "授权码" );

            }
        };
        Session session = Session.getInstance( props, auth );
        // 开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
        session.setDebug( true );
        // 2.创建一个Message,它相当于是邮件内容
        Message message = new MimeMessage( session );
        message.setFrom( new InternetAddress( "发送者的邮箱地址" ) ); // 设置发送者
        message.setRecipient( MimeMessage.RecipientType.TO, new InternetAddress( email ) ); // 设置发送方式与接收者
        message.setSubject( "单词大赛结果" );
        //message.setText("这是一封激活邮件,请点击");
        message.setContent( emailMsg, "text/html;charset=utf-8" );

        // 3.创建 Transport用于将邮件发送
        Transport.send( message );

    }


}

你可能感兴趣的:(java)