问题描述
最近准备将一个项目发布到腾讯云,在本地所有的功能都能够实现的很好,但是一到腾讯云上面就出现了一个问题:
错误报告内容:Could not connect to SMTP host: smtp.163.com, port: 25
翻译起来就是:不能连接到smtp.163.com,因为25号端口的原因。
问题解决
这是因为腾讯云(阿里云)基于安全考虑,会禁用25端口。
下面是腾讯云的后台:
解决的办法有:
- 解封25号端口(不推荐);
- 使用其他端口(465号端口,推荐)。
下面是163邮箱的截图:
也就是说,可以修改为:
代码语言: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("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();
}
}</code></pre></div></div><p></p><p>版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。 </p><p>发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/186131.html原文链接:https://javaforall.cn</p>