java 批量发送邮件_java – 提高通过spring-mail发送批量电子邮件的性能

我有一个独立于spring-stand的应用程序,它使用如下的简单弹簧电子邮件代码,to和消息是使用从map迭代的值构造的.

我已经对here问题提出了一些建议,但我需要一些具体的建议.下面是我的代码

for (Map.Entry> entry : testMap

.entrySet()) {

String key = entry.getKey();

StringBuilder htmlBuilder = new StringBuilder();

List valueList = entry.getValue();

for (Model value : valueList) {

htmlBuilder.append('List Values in the message');

}

mail.sendMail( msgFrom,body); // call my sendMail function in another class

}

发送邮件的代码:

MimeMessage email = mailSender.createMimeMessage();

MimeMessageHelper helper = new MimeMessageHelper(email, true);

helper.setFrom(new InternetAddress(from));

helper.setTo(new InternetAddress(to));

helper.setText(msg, true);

helper.addInline("identifier1234", res);

mailSender.send(email);

发送邮件需要3到4秒.我每天都有大约400,000的大用户列表要发送

我做错了什么或任何其他方法来加快这个过程.我需要专家建议

谢谢你的时间和帮助:)

解决方法:

恕我直言,发送邮件本身的过程可以改进,因为目前,你打开一个新的邮件服务器连接每条消息.您可以使用批量发送来改进它.

Spring MailSender接口本身支持发送一组消息而不是一个消息,因此您没有明确地处理JavaMail会话.您可以简单地修改实际以这种方式发送邮件的类

int batchSize = 16; // for example, adjust it to you needs

MimeMessage[] messages = new MimeMessage[batchSize];

int messageIndex = 0;

public void sendMail(String msgFrom, String body) {

// prepare MimeMessage

messages[messageIndex++] = email;

if (messagesIndex == batchSize) {

mailSender.send(messages);

messageIndex = 0;

}

public void sendLastMails() {

if (messageIndex > 0) {

MimeMessage[] lastMessages = new MimeMessage[messageIndex];

for (int i =0; i

lastMessages[i] = messages[i];

}

mailSender.send(lastMessages);

}

编辑:

sendLastMails方法可以在几个地方调用.首先,必须在单例bean的destroy方法中调用它,以确保在应用程序关闭时不会忘记任何消息.如果发送邮件的类是单例bean,则声明bean的destroy方法是sendLastMail或调用它就足够了.

然后,根据您自己的业务规则,可以在发送一批邮件后调用它.典型用法:在您的示例中,您有testMap.你应该这样重写它:

for (Map.Entry> entry : testMap

.entrySet()) {

...

mail.sendMail( msgFrom,body); // call my sendMail function in another class

}

mail.sendLastMails();

现在由您来决定这种改进是否足够或是否应该外包.

标签:bulk,java,performance,spring,email

来源: https://codeday.me/bug/20191003/1849302.html

本程序是使用Javamail API和Jacob Office操作库编写的批量发送实名邀请函的Java程序。 1、不仅可以提供全功能的邮件发送功能: - 发送常规邮件(邮件主题、发送地址、接收地址、邮件正文) - 邮件群发 - 支持抄送 - 支持附件的发送,可同时发送多个附件文件,附件的文件名可以为中文 - 支持秘送 - 支持已读回执 - 邮件服务器认证 - 等 2、还可以提供实名制的邮件批量发送: 邮件群发已经不是什么很了不起的功能了,但是实名制的邮件群发倒是迫切需要解决的事情, 特别是办公室工作人员需要发送实名制的邀请函,如果每发送一个电子邮件,都要打开附件(如果 附件是word的话,打开的速度又很慢,还容易死机)添加邀请人的姓名,并且还要在邮件的正文里 面再复制一次邀请人的姓名,我觉得如果让我干这个,还不如让我去死。 现在有了这个程序您只需要提供提供几个模板,配置好您的文件位置,所有的一切本程序可以 为您轻松搞定。人应该干人该干的事情,计算机应该干计算机该干的事情,人要是老干计算机干的事 情,不是人疯了就是世界末日来到了。 3、本程序是免费程序,虽然提供了非常实用的功能,但是本身还是有很多意想不到的bug,希望各 位可以多多提出意见,不吝赐教!如有任何问题请发邮箱:nicegiving@gmail.com,如果我 的网络没断的话我会在当天给您回复,谢谢您的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值