gpt4 book ai didi

java - Apache Commons 电子邮件和重用 SMTP 连接

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:23:00 24 4
gpt4 key购买 nike

目前我正在使用 Commons Email发送电子邮件,但我一直无法找到在发送的电子邮件之间共享 smtp 连接的方法。我有如下代码:

    Email email = new SimpleEmail();
email.setFrom("example@example.com");
email.addTo("example@example.com");
email.setSubject("Hello Example");
email.setMsg("Hello Example");
email.setSmtpPort(25);
email.setHostName("localhost");
email.send();

这非常可读,但是当我处理大量消息时速度很慢,我认为这是为每条消息重新连接的开销。因此,我使用以下代码对其进行了分析,发现使用重用传输可以使速度提高三倍左右。

    Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
Session mailSession = Session.getDefaultInstance(props, null);
Transport transport = mailSession.getTransport("smtp");
transport.connect("localhost", 25, null, null);

MimeMessage message = new MimeMessage(mailSession);
message.setFrom(new InternetAddress("example@example.com"));
message.addRecipient(Message.RecipientType.TO, new InternetAddress("example@example.com"));
message.setSubject("Hello Example");
message.setContent("Hello Example", "text/html; charset=ISO-8859-1");

transport.sendMessage(message, message.getAllRecipients());

所以我想知道是否有办法让 Commons Email 重复使用一个 SMTP 连接来发送多个电子邮件?我更喜欢 Commons Email API,但性能有点糟糕。

谢谢,赎金

最佳答案

在深入研究公共(public)资源本身之后,我提出了以下解决方案。这应该可行,但可能有我不知道的更好的解决方案

    Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
Session mailSession = Session.getDefaultInstance(props, null);
Transport transport = mailSession.getTransport("smtp");
transport.connect("localhost", 25, null, null);

Email email = new SimpleEmail();
email.setFrom("example@example.com");
email.addTo("example@example.com");
email.setSubject("Hello Example");
email.setMsg("Hello Example");
email.setHostName("localhost"); // buildMimeMessage call below freaks out without this

// dug into the internals of commons email
// basically send() is buildMimeMessage() + Transport.send(message)
// so rather than using Transport, reuse the one that I already have
email.buildMimeMessage();
Message m = email.getMimeMessage();
transport.sendMessage(m, m.getAllRecipients());

关于java - Apache Commons 电子邮件和重用 SMTP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6694975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com