SMTP JavaMail:获取SMTPTransport未连接线程时出错

SMTP JavaMail:获取SMTPTransport未连接线程时出错,java,multithreading,email,smtp,jakarta-mail,Java,Multithreading,Email,Smtp,Jakarta Mail,我正在尝试使用JavaMail API。我正在尝试使用同一传输对象发送多封电子邮件,以避免重新验证 transport = mailSession.getTransport("smtp"); transport.connect(host, mail.getSenderAddress(), password); for (int i = 1; i <= 10; i++) { transport.sendMessage(mailMessage, mailMessage.getAllRe

我正在尝试使用JavaMail API。我正在尝试使用同一传输对象发送多封电子邮件,以避免重新验证

transport = mailSession.getTransport("smtp");
transport.connect(host, mail.getSenderAddress(), password);
for (int i = 1; i <= 10; i++) {
    transport.sendMessage(mailMessage, mailMessage.getAllRecipients());
}
我正在创建10个不同的线程,如:

transport = mailSession.getTransport("smtp");
transport.connect(host, mail.getSenderAddress(), password);
for (int i = 1; i <= 10; i++) {
    new Thread(new MailSender(transport, mailMessage)).start();
}
就在for循环之前,我正在调用connect,那么它为什么会抱怨它没有连接?

打开该选项可以更好地了解正在发生的事情。很可能是线程错误,或者服务器出于某种原因正在断开连接


但是使用线程在单个连接上发送消息是没有意义的,因为当它到达连接时,所有的工作都是单线程的。在连接上一次只能发送一条消息。这就是SMTP的工作方式。如果你想同时发送多条消息,你需要多个连接。

Ohh好的。但是,当我试图发送1000封邮件,每次都建立新的连接时,过了一段时间,它开始为太多的请求抛出异常。我正在使用Gmail SMTP服务器。是否有任何方式可以从一个帐户发送多封电子邮件?我想尽快完成。你不需要每次都建立连接。您可以在每个连接上发送一组消息,并使用多个连接。如果你使用的是免费的Gmail,他们会限制你发送邮件的频率。如果你有一个付费帐户,你的服务条款应该描述你可以做什么。是的,我试过了,Gmail SMTP不允许超过10-12个并行连接。谢谢你的帮助。
transport = mailSession.getTransport("smtp");
transport.connect(host, mail.getSenderAddress(), password);
for (int i = 1; i <= 10; i++) {
    new Thread(new MailSender(transport, mailMessage)).start();
}
Exception in thread "Thread-2" java.lang.IllegalStateException: Not connected
at com.sun.mail.smtp.SMTPTransport.checkConnected(SMTPTransport.java:2252)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1074)
at com.rubberduck.mymail.MyMailHelper$MailSender.run(MyMailHelper.java:128)
at java.lang.Thread.run(Thread.java:745)