前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]

【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]

作者头像
全栈程序员站长
发布2022-11-09 16:46:43
3.1K0
发布2022-11-09 16:46:43
举报

问题描述

最近准备将一个项目发布到腾讯云,在本地所有的功能都能够实现的很好,但是一到腾讯云上面就出现了一个问题:

错误报告内容:Could not connect to SMTP host: smtp.163.com, port: 25

翻译起来就是:不能连接到smtp.163.com,因为25号端口的原因。

【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]
【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]

问题解决

这是因为腾讯云(阿里云)基于安全考虑,会禁用25端口。

下面是腾讯云的后台:

【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]
【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]

解决的办法有:

  1. 解封25号端口(不推荐);
  2. 使用其他端口(465号端口,推荐)。

下面是163邮箱的截图:

【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]
【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]

也就是说,可以修改为:

代码语言:javascript
复制
public static void main(String[] args) throws Exception {
        Properties prop = new Properties();
        //协议
        prop.setProperty("mail.transport.protocol", "smtp");
        //服务器
        prop.setProperty("mail.smtp.host", "smtp.exmail.qq.com");
        //端口
        prop.setProperty("mail.smtp.port", "465");
        //使用smtp身份验证
        prop.setProperty("mail.smtp.auth", "true");

        //获取Session对象
        Session s = Session.getDefaultInstance(prop,new Authenticator() {
            //此访求返回用户和密码的对象
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                PasswordAuthentication pa = new PasswordAuthentication("***", "********");
                return pa;
            }
        });
        //设置session的调试模式,发布时取消
        s.setDebug(true);
        MimeMessage mimeMessage = new MimeMessage(s);
        try {
            mimeMessage.setFrom(new InternetAddress("***@163.com"));
            mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress("********@**.com"));
            //设置主题
            mimeMessage.setSubject("账户密码重置");
            mimeMessage.setSentDate(new Date());
            //设置内容
            mimeMessage.setText("您使用了密码重置功能");
            mimeMessage.saveChanges();
            //发送
            Transport.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        
    }

更优的解决方案

在上面的腾讯云的后台上,写明了还有一个解决方案(推荐):腾讯企业邮箱

也就是说:我们可以使用域名作为邮箱的后缀!

比如:我的域名是lvchademiao.com,这样可以使用message.lvchademiao.com作为邮箱来进行发送邮件!

这是一个不错的操作,而且这个功能是免费的!

附上地址:腾讯企业邮箱

接下来就是一堆注册等步骤。注册完之后,申请到了一个邮箱message.lvchademiao.com。

接下来,又一个问题出来了:

【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]
【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]

错误报告内容:535 Error: ÇëʹÓÃÊÚȨÂëµÇ¼(一堆乱码)

【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]
【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]

网上的解决办法都是说没有使用授权码!

大哥,用邮箱的SMTP功能我能不知道使用授权码嘛!!

最终关键点在于:发件人账号是个人免费邮箱时username可以不加@及其后面的,但是如果发件人账号是企业邮箱时,发件人账号必须加@及其后面的。

即个人免费邮箱可以如下:ms.setAuth(“111111111”, “password1”);

但是企业邮箱必须是这样:ms.setAuth(“111111111@xxx.com”,”password1″);

也就是说:

代码语言:javascript
复制
public static void main(String[] args) throws Exception {
        Properties prop = new Properties();
        //协议
        prop.setProperty("mail.transport.protocol", "smtp");
        //服务器
        prop.setProperty("mail.smtp.host", "smtp.exmail.qq.com");
        //端口
        prop.setProperty("mail.smtp.port", "465");
        //使用smtp身份验证
        prop.setProperty("mail.smtp.auth", "true");

        //使用SSL,企业邮箱必需!
        //开启安全协议,如果出错显示类不存在,就更新mail的jar包
        MailSSLSocketFactory sf = null;
        try {
            sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
        } catch (GeneralSecurityException e1) {
            e1.printStackTrace();
        }
        prop.put("mail.smtp.ssl.enable", "true");
        prop.put("mail.smtp.ssl.socketFactory", sf);

        //获取Session对象
        Session s = Session.getDefaultInstance(prop,new Authenticator() {
            //此访求返回用户和密码的对象
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                PasswordAuthentication pa = new PasswordAuthentication("message@lvchademiao.com", "********");
                return pa;
            }
        });
        //设置session的调试模式,发布时取消
        s.setDebug(true);
        MimeMessage mimeMessage = new MimeMessage(s);
        try {
            mimeMessage.setFrom(new InternetAddress("message@lvchademiao.com"));
            mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress("********@**.com"));
            //设置主题
            mimeMessage.setSubject("账户密码重置");
            mimeMessage.setSentDate(new Date());
            //设置内容
            mimeMessage.setText("您使用了密码重置功能");
            mimeMessage.saveChanges();
            //发送
            Transport.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/186131.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年10月4日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 问题解决
  • 更优的解决方案
相关产品与服务
腾讯企业邮
腾讯企业邮(Tencent Exmail)是腾讯基于多年海量用户邮件系统研发和运营经验,为企业量身订造的一套办公用邮箱系统。稳定、简洁和快速,整合了丰富的企业应用,涵盖资源共享、消息发布、组织管理等方面。腾讯企业邮和微信生态深度整合,为您提供便捷高效的移动邮件解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档