Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javamail库发送电子邮件时重用连接_Java_Performance_Email - Fatal编程技术网

使用Javamail库发送电子邮件时重用连接

使用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

我尝试使用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连接。有没有办法建立一个用于发送电子邮件的连接池?还有其他性能更好的库我可以使用吗?

您可以看看spring boot mail:

以下是一个例子:

根据您要查找的结果,这里有多个选项

在当前的实现中,为套接字连接/断开连接增加了额外的时间—这就是连接池所能解决的问题

选择1

使用连接池,结果是您获取一个已经建立的通道,并且您唯一的等待时间是消息实际发送

这为您提供了一个优势,即您可以根据消息是否确实通过中继成功发送而返回响应—这仍然会阻塞网络IO,并且可能是最长的呼叫

选择2


如果您不关心响应消息,或者可以稍后再来获取它,您可以选择将消息添加到其他地方的队列中,在该队列中,独立于用户交互的独立线程正在执行网络IO。这将导致更快的执行,因为您的UI线程上没有阻塞调用。

我找不到任何关于Spring的SMTP连接池的信息。你实施了吗?