一. 起因

最近发现项目中有关发送邮件的模块偶尔会阻塞住,导致整个线程阻塞。诡异的是没有捕获到任何异常日志,程序莫名其妙就卡在了 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 超时时间相关推荐

  1. C# 的tcp Socket设置自定义超时时间

    简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...

  2. Android okhttp3使用实例,OKhttp设置请求超时时间,okgo使用demo

    1.导入OKhttp依赖 compile 'com.squareup.okhttp3:okhttp:3.4.1' 2.创建请求工具类 三个工具类 /*** 作者:created by meixi* 邮 ...

  3. 熟练掌握如何设置空闲超时时间.

    熟练掌握如何设置空闲超时时间.   配置实例一: Aiko(config)#exit Aiko# *Mar 1 00:20:11.231: %SYS-5-CONFIG_I: Configured fr ...

  4. php session超时时间_php怎么设置session超时时间

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  5. java session时间_java session时长问题,java设置session超时时间实例

    java session超时设置你知道应该如何设置吗?下面要给大家带来的实例就是和java设置session超时时间相关的内容,一起来看看具体实现方式吧. 一般的系统登陆了之后,都会有设置一个当前的s ...

  6. 【教程】Windows通过注册表方式设置TCP超时时间

    Windows 通过注册表设置 TCP超时时间: 1.打开"开始"菜单,输入"regedit"并打开注册表编辑器 2.在注册表编辑器中,导航到 HKEY LOC ...

  7. mysql 事务 超时时间_设置事务超时时间的问题及数据库update和锁

    Oracle的update语句问题: update config t set t.value =1 where t.key='DB_ KEY' 或者: select * from config t w ...

  8. apache 设置session超时时间_深入分析 Session 和 Cookie,看这篇就对了

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 第一时间与你相约 每日英文 Promise yourself to be so strong that nothing can ...

  9. Java selenium和python_c#和Java和python设置selenium超时时间

    c# //设置页面加载超时时间 this.driver.Manage().Timeouts().PageLoad.Seconds.Equals(TimeSpan.FromSeconds(300)); ...

  10. java设置post超时时间_HttpClient 如何设置超时时间

    搜索热词 今天分享一个巨坑,就是 HttpClient.这玩意有多坑呢?就是每个版本都变,近日笔者深受其害. 先看一下代码,我要发送请求调用一个c++接口. public static String ...

最新文章

  1. Unity3D是怎么提升游戏运行效率的?
  2. 大数据遇上大型机 结果会如何?
  3. Jessica's Reading Problem
  4. Java性能优化指南,及唯品会的实战
  5. 前端笔记-vue中引入Bootstrap
  6. spring 连数据库的配置文件
  7. 移动通讯市场发展概况及预测
  8. 推荐一个网站:编程资料网 http://www.ourdev.net/
  9. 快捷连接 残差_残差网络解决了什么问题
  10. win10计算机系统优化设置,小编教你windows10设置优化提高系统性能
  11. Unix时间戳转北京时间 UTC时间转北京时间 C代码实现
  12. TILERA--Makefile实例
  13. java审计之XXE
  14. ArcGIS 对道路名称进行标注
  15. Android如何处理过大图片的显示
  16. 我用wxPython搭建GUI量化系统之wx.grid实现excel功能
  17. 西安财经大学计算机考研科目,西安财经大学2020年硕士研究生考试复试科目与参考书目...
  18. 淘宝爬虫实战(附代码和数据集)——今天你脱发了吗?
  19. arcgis根据7参转坐标_在ArcGIS Desktop中进行三参数或七参数精确投影转换
  20. S32K144(13)PDB

热门文章

  1. 1194: 总成绩排序(结构体专题)
  2. 南师大GIS考研数据库2015年第三题
  3. 恩智浦智能车竞赛电磁直立组国一之速墨二队2018回顾与总结
  4. 公链生态周报:币安下架BSV,链塔加入本体共建者计划 | 链塔智库
  5. 软件工程投资回收率计算
  6. 数据分析师真实的工作是怎样的,这篇文章带你看他们的职责
  7. 微信小程序开发费用一览表
  8. 深度解析反思型Essay怎么写?
  9. PTA 乙级 1003 我要通过! (20 分) C++
  10. Win10注册表损坏的修复方法