JavaMail有时连接到gmail,有时不连接。看起来很随意

JavaMail有时连接到gmail,有时不连接。看起来很随意,java,smtp,gmail,jakarta-mail,Java,Smtp,Gmail,Jakarta Mail,我一直在尝试使用JavaMail从一个学校项目的程序发送电子邮件。我让它工作,但现在它只是偶尔工作。真的,不管我在哪里(在学校,在家,在咖啡馆),有时有效,有时无效 我收到的错误消息是: 线程“AWT-EventQueue-0”java.lang.RuntimeException:javax.mail.MessaginException:无法连接到SMTP主机:SMTP.gmail.com,端口:465; 嵌套异常是: java.net.ConnectException:连接超时:连接 在var

我一直在尝试使用JavaMail从一个学校项目的程序发送电子邮件。我让它工作,但现在它只是偶尔工作。真的,不管我在哪里(在学校,在家,在咖啡馆),有时有效,有时无效

我收到的错误消息是:

线程“AWT-EventQueue-0”java.lang.RuntimeException:javax.mail.MessaginException:无法连接到SMTP主机:SMTP.gmail.com,端口:465; 嵌套异常是: java.net.ConnectException:连接超时:连接 在varsling.sendmail.sendmail(sendmail.java:40)

奇怪的是,我没有以任何方式更改代码。JavaMail和gmail连接有问题吗

无论如何,这是我的代码:)

将setFrom()更改为其他任何内容都没有什么帮助,所以我将其设置为默认值(几周前我在某个网站上的示例中发现了这一点)

有人有什么办法吗


非常感谢

正如上面的评论所说,这听起来像是一个网络问题,而不是JavaMail问题。也许你的防火墙或防病毒软件干扰了你的连接能力


您可能还想阅读并清理代码,尽管我怀疑这与您的问题有关。

对我来说似乎没问题,而且没有任何东西看起来取决于一天中的时间。我会指出沟通失败;如果失败,请尝试执行
telnet smtp.gmail.com 465
,并检查服务器是否应答或连接是否被拒绝/超时。出现此问题的不仅仅是您。O365也会出现这种情况,但有时并不表明它失败,但电子邮件从未发送。如果我在Python或Powershell中做同样的事情,它永远不会失败,因此我不确定问题在哪里,但怀疑JavaMail有一些问题有待解决。谢谢您的回答。你们两个:)我在控制面板上启用了telnet客户端,并测试了SJuan76在cmd(windows 7)中所说的“telnet smtp.gmail.com 465”。结果:“无法建立到主机的连接,在端口465上:无法连接”-直接翻译。我刚刚关闭了防火墙,但没有帮助。仍然无法连接到smtp:SIf telnet无法连接,则您有一个更基本的网络问题。也许你在一个拒绝让你连接的网络防火墙后面?尝试“ping smtp.gmail.com”查看是否有到主机的路由。
import java.util.Properties;
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 SendEmail {

public void sendEmail(String text, String to, String username, String password) {
    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");

    Session session = Session.getDefaultInstance(props,
    new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
    });

    try {
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("from@no-spam.com"));
        message.setRecipients(Message.RecipientType.TO,
                        InternetAddress.parse(to));
        message.setSubject("Danger!");
        message.setText(text);

        Transport.send(message);
        System.out.println("Sent");
    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }
} }