我正在尝试使用JavaMail API发送大量电子邮件,并且发现我的代码中最慢的部分(每封电子邮件大约1秒)如下:
long startSendTime = System.currentTimeMillis();
Transport transport = mailSession.getTransport();
transport.connect();
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
transport.close();
long endTime = System.currentTimeMillis();
logger.info("Finished sending message, took: " + (endTime - startSendTime) + "ms");
我猜这是因为每封电子邮件都需要设置TCP连接。有没有办法为电子邮件发送连接池?是否有其他更高效的库我可以使用?
答案 0 :(得分:0)
你可以看看春季启动邮件:
http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-email.html
这是一个例子: Sending Email via Spring boot "spring-boot-starter-mail"
答案 1 :(得分:0)
根据您要查找的结果,您有多个选项。
使用当前的实现,您可以为套接字连接/断开连接添加额外的时间 - 这就是连接池将解决的问题。
选项1
使用连接池,结果是您获取已经建立的频道,并且您唯一的等待时间是实际发送该消息。
这样做的好处在于,您可以根据消息是否实际成功通过中继发送而返回响应 - 这仍然阻止网络IO,可能最长的调用
选项2
如果你不关心响应消息,或者可以稍后再回来 - 你可以选择将消息添加到其他地方的队列,其中一个独立的线程,独立于用户交互正在进行网络IO。这将导致执行速度更快,因为您最终在UI线程上没有阻塞调用。