JavaMail 发送邮件阻塞问题解决——设置 smtp 超时时间
一. 起因
最近发现项目中有关发送邮件的模块偶尔会阻塞住,导致整个线程阻塞。诡异的是没有捕获到任何异常日志,程序莫名其妙就卡在了 sendMail 上。
后来想到发送邮件的内容过大,可能由于这个原因导致,所以找了一下有关 JavaMail 超时设置的资料。现做整理,顺便聊聊一些小坑。
二. JavaMail smtp 超时参数
参数 | 类型 | 描述 |
---|---|---|
mail.smtp.connectiontimeout | int | Socket connection timeout value in milliseconds. This timeout is implemented by java.net.Socket. Default is infinite timeout. |
mail.smtp.timeout | int | Socket read timeout value in milliseconds. This timeout is implemented by java.net.Socket. Default is infinite timeout. |
mail.smtp.writetimeout | int | Socket write timeout value in milliseconds. This timeout is implemented by using a java.util.concurrent.ScheduledExecutorService per connection that schedules a thread to close the socket if the timeout expires. Thus, the overhead of using this timeout is one thread per connection. Default is infinite timeout. |
源自 JavaMail API,文末有链接。
三. 参数简介
- mail.smtp.connectiontimeout:连接时间限制,单位毫秒。是关于与邮件服务器建立连接的时间长短的。默认是无限制。
- mail.smtp.timeout:邮件接收时间限制,单位毫秒。这个是有关邮件接收时间长短。默认是无限制。
- mail.smtp.writetimeout:邮件发送时间限制,单位毫秒。有关发送邮件时内容上传的时间长短。默认同样是无限制。
大部分博客、资料都提到了前两个属性,而容易忽略最后一个。因为我是用来发送邮件的,所以上传邮件的内容过大是导致发送模块阻塞的原因。而设置 writetimeout 时间后,再超时时就会报异常,捕获处理下就可以了。
四. 在 SpringBoot 中的配置
我所用的是 SpringBoot 工程,之前也发表过一篇有关 SpringBoot 配置邮件的博客:SpringBoot 配置邮件服务
只需要在原有配置的基础上,加上如下设置即可。
spring:mail:properties:mail:smtp:timeout: 10000connectiontimeout: 10000writetimeout: 10000
站在前人的肩膀上前行,感谢以下资料的支持。
- JavaMail API documentation
- JavaMail的大坑
原文作者: 一只因特马
原文链接: https://www.interhorse.cn/a/2959154794/
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-ND 许可协议。转载请注明出处!
JavaMail 发送邮件阻塞问题解决——设置 smtp 超时时间相关推荐
- C# 的tcp Socket设置自定义超时时间
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...
- Android okhttp3使用实例,OKhttp设置请求超时时间,okgo使用demo
1.导入OKhttp依赖 compile 'com.squareup.okhttp3:okhttp:3.4.1' 2.创建请求工具类 三个工具类 /*** 作者:created by meixi* 邮 ...
- 熟练掌握如何设置空闲超时时间.
熟练掌握如何设置空闲超时时间. 配置实例一: Aiko(config)#exit Aiko# *Mar 1 00:20:11.231: %SYS-5-CONFIG_I: Configured fr ...
- php session超时时间_php怎么设置session超时时间
[摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...
- java session时间_java session时长问题,java设置session超时时间实例
java session超时设置你知道应该如何设置吗?下面要给大家带来的实例就是和java设置session超时时间相关的内容,一起来看看具体实现方式吧. 一般的系统登陆了之后,都会有设置一个当前的s ...
- 【教程】Windows通过注册表方式设置TCP超时时间
Windows 通过注册表设置 TCP超时时间: 1.打开"开始"菜单,输入"regedit"并打开注册表编辑器 2.在注册表编辑器中,导航到 HKEY LOC ...
- mysql 事务 超时时间_设置事务超时时间的问题及数据库update和锁
Oracle的update语句问题: update config t set t.value =1 where t.key='DB_ KEY' 或者: select * from config t w ...
- apache 设置session超时时间_深入分析 Session 和 Cookie,看这篇就对了
点击上方 "程序员小乐"关注, 星标或置顶一起成长 第一时间与你相约 每日英文 Promise yourself to be so strong that nothing can ...
- Java selenium和python_c#和Java和python设置selenium超时时间
c# //设置页面加载超时时间 this.driver.Manage().Timeouts().PageLoad.Seconds.Equals(TimeSpan.FromSeconds(300)); ...
- java设置post超时时间_HttpClient 如何设置超时时间
搜索热词 今天分享一个巨坑,就是 HttpClient.这玩意有多坑呢?就是每个版本都变,近日笔者深受其害. 先看一下代码,我要发送请求调用一个c++接口. public static String ...
最新文章
- Unity3D是怎么提升游戏运行效率的?
- 大数据遇上大型机 结果会如何?
- Jessica's Reading Problem
- Java性能优化指南,及唯品会的实战
- 前端笔记-vue中引入Bootstrap
- spring 连数据库的配置文件
- 移动通讯市场发展概况及预测
- 推荐一个网站:编程资料网 http://www.ourdev.net/
- 快捷连接 残差_残差网络解决了什么问题
- win10计算机系统优化设置,小编教你windows10设置优化提高系统性能
- Unix时间戳转北京时间 UTC时间转北京时间 C代码实现
- TILERA--Makefile实例
- java审计之XXE
- ArcGIS 对道路名称进行标注
- Android如何处理过大图片的显示
- 我用wxPython搭建GUI量化系统之wx.grid实现excel功能
- 西安财经大学计算机考研科目,西安财经大学2020年硕士研究生考试复试科目与参考书目...
- 淘宝爬虫实战(附代码和数据集)——今天你脱发了吗?
- arcgis根据7参转坐标_在ArcGIS Desktop中进行三参数或七参数精确投影转换
- S32K144(13)PDB