本帖最后由 MinecraftE_D 于 2021-8-20 15:05 编辑
我使用JavaMail来写恢复密码的时候,遇到了一个问题 就是这样子的 插件是1.16.4 PaperSpigot的
复制代码我换了很多种写法都不行
还尝试了网上的删除SSLv3的那种方法,也不行
在本地是telnet得通的
防火墙也放行了465端口
不是多线程原因,已经试过了
代码附在下面,求大神指点
MailUtil.java
复制代码MailConfig.java
复制代码Mail.java
复制代码最后启动线程在这里
复制代码
我使用JavaMail来写恢复密码的时候,遇到了一个问题 就是这样子的 插件是1.16.4 PaperSpigot的
- [14:53:19 WARN]: javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465;
- [14:53:19 WARN]: nested exception is:
- [14:53:19 WARN]: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
- [14:53:19 WARN]: at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)
- [14:53:19 WARN]: at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
- [14:53:19 WARN]: at javax.mail.Service.connect(Service.java:317)
- [14:53:19 WARN]: at javax.mail.Service.connect(Service.java:176)
- [14:53:19 WARN]: at javax.mail.Service.connect(Service.java:125)
- [14:53:19 WARN]: at javax.mail.Transport.send0(Transport.java:253)
- [14:53:19 WARN]: at javax.mail.Transport.send(Transport.java:124)
- [14:53:19 WARN]: at plugins.wnplugin.util.TestUtil.send(TestUtil.java:52)
- [14:53:19 WARN]: at plugins.wnplugin.Mail.run(Mail.java:16)
- [14:53:19 WARN]: at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:100)
- [14:53:19 WARN]: at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54)
- [14:53:19 WARN]: at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
- [14:53:19 WARN]: at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
- [14:53:19 WARN]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
- [14:53:19 WARN]: at java.lang.Thread.run(Unknown Source)
- [14:53:19 WARN]: Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
- [14:53:19 WARN]: at sun.security.ssl.HandshakeContext.<init>(Unknown Source)
- [14:53:19 WARN]: at sun.security.ssl.ClientHandshakeContext.<init>(Unknown Source)
- [14:53:19 WARN]: at sun.security.ssl.TransportContext.kickstart(Unknown Source)
- [14:53:19 WARN]: at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
- [14:53:19 WARN]: at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
- [14:53:19 WARN]: at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:527)
- [14:53:19 WARN]: at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:332)
- [14:53:19 WARN]: at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:208)
- [14:53:19 WARN]: at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
- [14:53:19 WARN]: ... 14 more
还尝试了网上的删除SSLv3的那种方法,也不行
在本地是telnet得通的
防火墙也放行了465端口
不是多线程原因,已经试过了
代码附在下面,求大神指点
MailUtil.java
- package plugins.wnplugin.util;
- import org.bukkit.ChatColor;
- import plugins.wnplugin.WnPlugin;
- import plugins.wnplugin.config.MailConfig;
- import java.io.UnsupportedEncodingException;
- import java.util.Date;
- import java.util.Properties;
- import javax.mail.*;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeMessage;
- public class MailUtil {
- public static boolean sendMail(String receiveMailAccount, String subject, String content) {
- MailConfig.reload();
- WnPlugin.instance.getLogger().info(ChatColor.BLUE + "reload!");
- Properties props = new Properties();
- props.setProperty("mail.transport.protocol", "smtp");
- props.setProperty("mail.smtp.host", MailConfig.getMailHost());
- props.setProperty("mail.smtp.auth", "true");
- String smtpPort = MailConfig.getEmailSmtpPort();
- props.setProperty("mail.smtp.port", smtpPort);
- if (MailConfig.getSslAuthVerify()) {
- props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
- props.setProperty("mail.smtp.socketFactory.fallback", "false");
- props.setProperty("mail.smtp.socketFactory.port", smtpPort);
- props.setProperty("mail.smtp.ssl.enable", "true");
- }
- WnPlugin.instance.getLogger().info(ChatColor.BLUE + "1 no");
- String emailAccount = MailConfig.getEmailAccount();
- String emailPassword = MailConfig.getEmailPwd();
- Session session = Session.getInstance(props);
- session.setDebug(MailConfig.getEnableDebug());
- MimeMessage message = new MimeMessage(session);
- try {
- message.setFrom(new InternetAddress(emailAccount,MailConfig.getEmailTheme(), "UTF-8"));
- } catch (MessagingException | UnsupportedEncodingException e) {
- e.printStackTrace();
- return false;
- }
- WnPlugin.instance.getLogger().info(ChatColor.BLUE + "2 no");
- try {
- message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount, "", "UTF-8"));
- } catch (MessagingException | UnsupportedEncodingException e) {
- e.printStackTrace();
- return false;
- }
- WnPlugin.instance.getLogger().info(ChatColor.BLUE + "3 no");
- try {
- message.setSubject(subject, "UTF-8");
- } catch (MessagingException e) {
- e.printStackTrace();
- return false;
- }
- WnPlugin.instance.getLogger().info(ChatColor.BLUE + "4 no");
- try {
- message.setContent(content, "text/html; charset=UTF-8");
- } catch (MessagingException e) {
- e.printStackTrace();
- return false;
- }
- WnPlugin.instance.getLogger().info(ChatColor.BLUE + "5 no");
- try {
- message.setSentDate(new Date());
- } catch (MessagingException e) {
- e.printStackTrace();
- return false;
- }
- WnPlugin.instance.getLogger().info(ChatColor.BLUE + "6 no");
- try {
- message.saveChanges();
- } catch (MessagingException e) {
- e.printStackTrace();
- return false;
- }
- WnPlugin.instance.getLogger().info(ChatColor.BLUE + "7 no");
- Transport transport;
- try {
- transport = session.getTransport();
- } catch (NoSuchProviderException e) {
- e.printStackTrace();
- return false;
- }
- WnPlugin.instance.getLogger().info(ChatColor.BLUE + "8 no");
- try {
- if (transport != null) {
- transport.connect(emailAccount, emailPassword);
- return false;
- }
- } catch (MessagingException e) {
- e.printStackTrace();
- return false;
- }
- WnPlugin.instance.getLogger().info(ChatColor.BLUE + "9 no");
- try {
- if (transport != null) {
- transport.sendMessage(message, message.getAllRecipients());
- }
- } catch (MessagingException e) {
- e.printStackTrace();
- return false;
- }
- WnPlugin.instance.getLogger().info(ChatColor.BLUE + "10 no");
- try {
- if (transport != null) {
- transport.close();
- return false;
- }
- } catch (MessagingException e) {
- e.printStackTrace();
- return false;
- }
- WnPlugin.instance.getLogger().info(ChatColor.BLUE + "11 no");
- return true;
- }
- }
- package plugins.wnplugin.config;
- import org.bukkit.ChatColor;
- import org.bukkit.configuration.file.FileConfiguration;
- import org.bukkit.configuration.file.YamlConfiguration;
- import org.bukkit.plugin.Plugin;
- import plugins.wnplugin.WnPlugin;
- import java.io.File;
- public class MailConfig {
- private static Plugin plugin = WnPlugin.getPlugin(WnPlugin.class);
- private static FileConfiguration config;
- private static String emailAccount;
- private static String emailPwd;
- private static String mailHost;
- private static String emailSmtpPort;
- private static Boolean sslAuthVerify;
- private static Boolean enableDebug;
- private static String emailTheme;
- private static String emailTitle;
- private static String emailContent;
- public static String getMailHost() {
- return mailHost;
- }
- public static String getEmailAccount() {
- return emailAccount;
- }
- public static String getEmailPwd() {
- return emailPwd;
- }
- public static String getEmailSmtpPort() {
- return emailSmtpPort;
- }
- public static Boolean getSslAuthVerify() {
- return sslAuthVerify;
- }
- public static Boolean getEnableDebug() {
- return enableDebug;
- }
- public static String getEmailTheme() {
- return emailTheme;
- }
- public static String getEmailTitle() {
- return emailTitle;
- }
- public static String getEmailContent() {
- return emailContent;
- }
- public static void reload() {
- plugin.reloadConfig();
- config = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder(), "mail.yml"));
- emailAccount = config.getString("email");
- WnPlugin.instance.getLogger().info(ChatColor.LIGHT_PURPLE + emailAccount);
- emailPwd = config.getString("password");
- WnPlugin.instance.getLogger().info(ChatColor.LIGHT_PURPLE + emailPwd);
- mailHost = config.getString("smtp_host");
- WnPlugin.instance.getLogger().info(ChatColor.LIGHT_PURPLE + mailHost);
- emailSmtpPort = config.getString("port");
- WnPlugin.instance.getLogger().info(ChatColor.LIGHT_PURPLE + emailSmtpPort);
- sslAuthVerify = config.getBoolean("enable_ssl");
- enableDebug = config.getBoolean("debug");
- emailTheme = config.getString("theme");
- WnPlugin.instance.getLogger().info(ChatColor.LIGHT_PURPLE + emailTheme);
- emailTitle = config.getString("title");
- WnPlugin.instance.getLogger().info(ChatColor.LIGHT_PURPLE + emailTitle);
- emailContent = config.getString("content");
- WnPlugin.instance.getLogger().info(ChatColor.LIGHT_PURPLE + emailContent);
- }
- static {
- config = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder(), "mail.yml"));
- emailAccount = config.getString("email");
- emailPwd = config.getString("password");
- mailHost = config.getString("smtp_host");
- emailSmtpPort = config.getString("emailSmtpPort");
- sslAuthVerify = config.getBoolean("enable_ssl");
- enableDebug = config.getBoolean("debug");
- emailTheme = config.getString("theme");
- emailTitle = config.getString("title");
- emailContent = config.getString("content");
- }
- }
- package plugins.wnplugin;
- import org.bukkit.scheduler.BukkitRunnable;
- import plugins.wnplugin.config.MailConfig;
- import plugins.wnplugin.util.MailUtil;
- public class Mail extends BukkitRunnable {
- @Override
- public void run(){
- MailUtil.sendMail("[email protected]", MailConfig.getEmailTitle(),MailConfig.getEmailContent());
- }
- }
- BukkitTask task = new Mail().runTaskAsynchronously(this);
本帖最后由 结冰的离季 于 2021-8-20 15:24 编辑
jdk的ssl权限开了吗,有人是换jdk解决的有人是开ssl解决的
报错行的代码呢
https://blog.csdn.net/weixin_44729221/article/details/117783087
java - javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate - Stack Overflow
TLSv1/v1.1 No longer works after upgrade, "No appropriate protocol" error – Azul Systems
jdk的ssl权限开了吗,有人是换jdk解决的有人是开ssl解决的
报错行的代码呢
https://blog.csdn.net/weixin_44729221/article/details/117783087
java - javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate - Stack Overflow
TLSv1/v1.1 No longer works after upgrade, "No appropriate protocol" error – Azul Systems
结冰的离季 发表于 2021-8-20 15:17
jdk的ssl权限开了吗,有人是换jdk解决的有人是开ssl解决的
报错行的代码呢
https://blog.csdn.net/weixin_4 ...
更改过后不再报错,但是出现了以下DEBUG信息,并且未收到邮件
- [15:38:30 INFO]: 220 newxmesmtplogicsvrszb6.qq.com XMail Esmtp QQ Mail Server.
- [15:38:30 INFO]: DEBUG SMTP: connected to host "smtp.qq.com", port: 465
- [15:38:30 INFO]:
- [15:38:35 INFO]: EHLO Minecraft-GCB
- [15:38:35 INFO]: 250-newxmesmtplogicsvrszb6.qq.com
- [15:38:35 INFO]: 250-PIPELINING
- [15:38:35 INFO]: 250-SIZE 73400320
- [15:38:35 INFO]: 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
- [15:38:35 INFO]: 250-AUTH=LOGIN
- [15:38:35 INFO]: 250-MAILCOMPRESS
- [15:38:35 INFO]: 250 8BITMIME
- [15:38:35 INFO]: DEBUG SMTP: Found extension "PIPELINING", arg ""
- [15:38:35 INFO]: DEBUG SMTP: Found extension "SIZE", arg "73400320"
- [15:38:35 INFO]: DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2"
- [15:38:35 INFO]: DEBUG SMTP: Found extension "AUTH=LOGIN", arg ""
- [15:38:35 INFO]: DEBUG SMTP: Found extension "MAILCOMPRESS", arg ""
- [15:38:35 INFO]: DEBUG SMTP: Found extension "8BITMIME", arg ""
- [15:38:35 INFO]: DEBUG SMTP: STARTTLS requested but already using SSL
- [15:38:35 INFO]: DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
- [15:38:35 INFO]: DEBUG SMTP: AUTH LOGIN command trace suppressed
- [15:38:35 INFO]: DEBUG SMTP: AUTH LOGIN succeeded
结冰的离季 发表于 2021-8-20 15:17
jdk的ssl权限开了吗,有人是换jdk解决的有人是开ssl解决的
报错行的代码呢
https://blog.csdn.net/weixin_4 ...
并且我用了别的插件进行测试,保证授权码,邮箱,发送对象均无误
MinecraftE_D 发表于 2021-8-20 15:43
并且我用了别的插件进行测试,保证授权码,邮箱,发送对象均无误
翻他代码=V=
结冰的离季 发表于 2021-8-20 15:52
翻他代码=V=
好家伙,它的代码我复制出来跑着报错,和最上面一样
本帖最后由 结冰的离季 于 2021-8-20 16:08 编辑
你是不是少了一些信息
复制代码
MinecraftE_D 发表于 2021-8-20 15:59
好家伙,它的代码我复制出来跑着报错,和最上面一样
你是不是少了一些信息
- // 创建Properties 类用于记录邮箱的一些属性
- Properties props = new Properties();
- // 表示SMTP发送邮件,必须进行身份验证
- props.put("mail.smtp.auth", "true");
- //此处填写SMTP服务器
- props.put("mail.smtp.host", "smtp.qq.com");
- //端口号,QQ邮箱端口587
- props.put("mail.smtp.port", "587");
- // 此处填写,写信人的账号
- props.put("mail.user", "[email protected]");
- // 此处填写16位STMP口令
- props.put("mail.password", "xxxxxxxx");
看不懂,呜呜呜