自从进公司,就一直在开发邮箱的功能,使用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兆附件的邮件,不到一分钟,就发送成功!!
此时真是不知道我该喜还是该悲?我明明是个程序员,但我还要考虑带宽的事。。。