阿里云服务器连接邮箱 SMTP 服务器 time out 的解决

去年 9 月底开始,出于上级对垃圾邮件管控的要求,新购 VPC 服务器限制了 25 端口,我们建议您使用邮件服务商的加密 465 端口。 或者您查询下所希望访问的发信服务是否提供了像阿里云企业邮箱一样的重定向 25 端口,这样不用解封 25 端口也可以发信。阿里云企业邮箱将 80 端口重定向到了 25 端,与直接调用 25 端的发信方式没有区别。 如果您仅用于本地发信,可尝试使用阿里企邮 smtp 80 端口。smtp.mxhichina.com 80

 1. 在阿里云申请开通 25 端口

  参考连接:https://help.aliyun.com/knowledge_detail/56130.html?spm=5176.11065259.1996646101.searchclickresult.777527b9DcosUg

  2. 使用第三方邮件服务商提供的 465 端口

  参考连接:https://blog.csdn.net/tianxiezuomaikong/article/details/80894143

image.png

可到阿里云盾解封 25 端口,或者使用 ssl 协议的 465 端口,实现代码


package com.test;



import java.security.Security;

import java.util.Date;
import java.util.Properties;

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.InternetAddress;
import javax.mail.internet.MimeMessage;


public class MailUtil {

    /**
     * 使用加密的方式,利用465端口进行传输邮件,开启ssl
     * @param to    为收件人邮箱
     * @param message    发送的消息
     */
    public static void sendEmil(String to, String message) {
        try {
            Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
            final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
            //设置邮件会话参数
            Properties props = new Properties();
            //邮箱的发送服务器地址
            props.setProperty("mail.smtp.host", "smtp.sina.com");
            props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
            props.setProperty("mail.smtp.socketFactory.fallback", "false");
            //邮箱发送服务器端口,这里设置为465端口
            props.setProperty("mail.smtp.port", "465");
            props.setProperty("mail.smtp.socketFactory.port", "465");
            props.put("mail.smtp.auth", "true");
            final String username = "发送者邮箱用户名";
            final String password = "发送者邮箱密码或者邮箱授权码";
            //获取到邮箱会话,利用匿名内部类的方式,将发送者邮箱用户名和密码授权给jvm
            Session session = Session.getDefaultInstance(props, new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password);
                }
            });
            //通过会话,得到一个邮件,用于发送
            Message msg = new MimeMessage(session);
            //设置发件人
            msg.setFrom(new InternetAddress("发件人邮箱"));
            //设置收件人,to为收件人,cc为抄送,bcc为密送
            msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
            msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(to, false));
            msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(to, false));
            msg.setSubject("邮件主题");
            //设置邮件消息
            msg.setText(message);
            //设置发送的日期
            msg.setSentDate(new Date());
            
            //调用Transport的send方法去发送邮件
            Transport.send(msg);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    
}```
  
    展开阅读全文