天天看点

javamail发送邮件慢

自从进公司,就一直在开发邮箱的功能,使用javamail发送邮件,发现发件很慢,于是对发件方法进行优化;

先分享解决办法,发件慢需要优化的地方:

1.将邮件附件以URL方式加到邮件体中,具体做法参见:https://blog.csdn.net/qq_26797239/article/details/84138992

2.异步计算邮件大小,异步添加其他信息到自己的数据库中

3.如果从代码层面已经无法再优化,那就视情况增加服务器带宽吧

4.如果实在不行,那就异步发邮件,异步计算邮件大小,异步添加其他信息到自己数据库中,

  但是这种方法有个弊端:那就是万一邮件在发送过程中报错了,得考虑一下怎么对用户进行提示邮件没有发送成功

分析原因如下:

代码优化:

最开始的做法:

       同步,步骤:从前端获取发件相关内容-->从OSS(文件服务器)上获取附件-->将附件以文件的形式添加到发送的邮件-->发送邮件-->计算邮件大小-->然后将发出的邮件存到我们自己的数据库中;这一套程序下来,如果发一个带3兆附件的邮件,要耗时五六分钟,整个邮箱功能根本无法使用;

后期优化做法:

      同步:从前端获取发件相关内容-->从OSS(文件服务器)上获取附件-->将附件以URL的形式添加到发送的邮件-->发送邮件

      异步:计算邮件大小-->然后将发出的邮件存到我们自己的数据库中;这一套程序下来,如果发一个带3兆附件的邮件,要耗时五六分钟,整个邮箱功能根本无法使用;

     代码层面优化完后,发现发送邮件可以减少三四分钟,但是当发送带14兆附件的时候,还是要用两三分钟,发个邮件时间这么长,客户肯定是无法忍受的,但是我真的已经没有办法从代码层面再优化了,附件很大的时候,我发现调用transport.sendMessage(message, message.getAllRecipients());用时很长,这个我真的不知道还能再怎么优化。。。最终管理服务器的同事将发件服务器的带宽从5兆增加到了15兆,这时,我知道了什么叫快,发一封带18兆附件的邮件,不到一分钟,就发送成功!!

此时真是不知道我该喜还是该悲?我明明是个程序员,但我还要考虑带宽的事。。。