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

问题描述

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

错误报告内容: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的解决办法[通俗易懂]

问题解决

这是因为腾讯云(阿里云)基于安全考虑,会禁用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的解决办法[通俗易懂]

也就是说,可以修改为:

代码语言: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();
    }
    
}</code></pre></div></div><h3 id="72rjq" name="%E6%9B%B4%E4%BC%98%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88">更优的解决方案</h3><p>在上面的腾讯云的后台上,写明了还有一个解决方案(推荐):<strong>腾讯企业邮箱</strong>。</p><p>也就是说:<strong>我们可以使用域名作为邮箱的后缀!</strong></p><p><strong>比如:我的域名是lvchademiao.com,这样可以使用message.lvchademiao.com作为邮箱来进行发送邮件!</strong></p><p>这是一个不错的操作,而且这个功能是免费的!</p><p>附上地址:腾讯企业邮箱。</p><p>接下来就是一堆注册等步骤。注册完之后,申请到了一个邮箱message.lvchademiao.com。</p><p>接下来,又一个问题出来了:</p><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:100%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1722851692694193982.jpg" /></div><div class="figure-desc">【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]</div></div></div></figure><p><strong>错误报告内容:535 Error: ÇëʹÓÃÊÚȨÂëµÇ¼(一堆乱码)</strong></p><figure class=""><div class="rno-markdown-img-url" style="text-align:center"><div class="rno-markdown-img-url-inner" style="width:77.3%"><div style="width:100%"><img src="https://cdn.static.attains.cn/app/developer-bbs/upload/1722851693062708121.jpg" /></div><div class="figure-desc">【腾讯云】记录一次Could not connect to SMTP host: smtp.163.com, port: 25的解决办法[通俗易懂]</div></div></div></figure><p><strong>网上的解决办法都是说没有使用授权码!</strong></p><p><strong>大哥,用邮箱的SMTP功能我能不知道使用授权码嘛!!</strong></p><p><strong>最终关键点在于:发件人账号是个人免费邮箱时username可以不加@及其后面的,但是如果发件人账号是企业邮箱时,发件人账号必须加@及其后面的。</strong></p><p>即个人免费邮箱可以如下:ms.setAuth(“111111111”, “password1”);</p><p>但是企业邮箱必须是这样:ms.setAuth(“111111111@xxx.com”,”password1″);</p><p>也就是说:</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">public static void main(String[] args) throws Exception {
    Properties prop = new Properties();
    //协议
    prop.setProperty(&#34;mail.transport.protocol&#34;, &#34;smtp&#34;);
    //服务器
    prop.setProperty(&#34;mail.smtp.host&#34;, &#34;smtp.exmail.qq.com&#34;);
    //端口
    prop.setProperty(&#34;mail.smtp.port&#34;, &#34;465&#34;);
    //使用smtp身份验证
    prop.setProperty(&#34;mail.smtp.auth&#34;, &#34;true&#34;);

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

    //获取Session对象
    Session s = Session.getDefaultInstance(prop,new Authenticator() {
        //此访求返回用户和密码的对象
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            PasswordAuthentication pa = new PasswordAuthentication(&#34;message@lvchademiao.com&#34;, &#34;********&#34;);
            return pa;
        }
    });
    //设置session的调试模式,发布时取消
    s.setDebug(true);
    MimeMessage mimeMessage = new MimeMessage(s);
    try {
        mimeMessage.setFrom(new InternetAddress(&#34;message@lvchademiao.com&#34;));
        mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(&#34;********@**.com&#34;));
        //设置主题
        mimeMessage.setSubject(&#34;账户密码重置&#34;);
        mimeMessage.setSentDate(new Date());
        //设置内容
        mimeMessage.setText(&#34;您使用了密码重置功能&#34;);
        mimeMessage.saveChanges();
        //发送
        Transport.send(mimeMessage);
    } catch (MessagingException e) {
        e.printStackTrace();
    }
    
}</code></pre></div></div><p></p><p>版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。 </p><p>发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/186131.html原文链接:https://javaforall.cn</p>