使用Javamail库发送电子邮件时重用连接
我尝试使用JavaMail API发送大量电子邮件,发现代码中最慢的部分(每封电子邮件大约1秒)如下所示:使用Javamail库发送电子邮件时重用连接,java,performance,email,Java,Performance,Email,我尝试使用JavaMail API发送大量电子邮件,发现代码中最慢的部分(每封电子邮件大约1秒)如下所示: long startSendTime = System.currentTimeMillis(); Transport transport = mailSession.getTransport(); transport.connect(); transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients()); transpor
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连接。有没有办法建立一个用于发送电子邮件的连接池?还有其他性能更好的库我可以使用吗?您可以看看spring boot mail: 以下是一个例子:
根据您要查找的结果,这里有多个选项 在当前的实现中,为套接字连接/断开连接增加了额外的时间—这就是连接池所能解决的问题 选择1 使用连接池,结果是您获取一个已经建立的通道,并且您唯一的等待时间是消息实际发送 这为您提供了一个优势,即您可以根据消息是否确实通过中继成功发送而返回响应—这仍然会阻塞网络IO,并且可能是最长的呼叫 选择2
如果您不关心响应消息,或者可以稍后再来获取它,您可以选择将消息添加到其他地方的队列中,在该队列中,独立于用户交互的独立线程正在执行网络IO。这将导致更快的执行,因为您的UI线程上没有阻塞调用。我找不到任何关于Spring的SMTP连接池的信息。你实施了吗?