JavaMail可能是邪恶的(并迫使您重新启动应用程序服务器)

在配置JavaMail时,总是有一种有趣的方法。 基本上,您必须填写无类型的地图或属性结构,并希望获得正确的解释。 网络上无数的教程显示了使其正常工作(发送/接收邮件)所需的最小属性。

但是,正如我们痛苦地了解到的那样,您可能需要注意一些鲜为人知的属性,即套接字IO的超时设置。 默认情况下,JavaMail对所有套接字操作(连接,IO等)都使用无限超时!

现在,假设您有一簇SMTP服务器,它们可以处理通过DNS循环访问的传出邮件。 如果其中一台服务器发生故障(恰好是JavaMail想要连接的服务器),则您的邮件发送线程将永远挂起! 这正是发生在我们身上的事情,我们需要表演一些真正令人讨厌的魔术来避免悲剧。

因此,我们现在为所有操作设置超时:

String MAIL_SMTP_CONNECTIONTIMEOUT ="mail.smtp.connectiontimeout";String MAIL_SMTP_TIMEOUT = "mail.smtp.timeout";String MAIL_SMTP_WRITETIMEOUT = "mail.smtp.writetimeout";String MAIL_SOCKET_TIMEOUT = "60000"; // Set a fixed timeout of 60s for all operations - // the default timeout is "infinite"props.put(MAIL_SMTP_CONNECTIONTIMEOUT, MAIL_SOCKET_TIMEOUT);props.put(MAIL_SMTP_TIMEOUT, MAIL_SOCKET_TIMEOUT);props.put(MAIL_SMTP_WRITETIMEOUT, MAIL_SOCKET_TIMEOUT);

另外,如果您打算访问基于DNS的循环服务(例如Amazon S3)或在我们的示例中的邮件集群,请不要忘记配置Java的DNS缓存tiemout(默认情况下也是无限的):

// Only cache DNS lookups for 10 seconds java.security.Security.setProperty("networkaddress.cache.ttl","10");

而且,在我们看来,将所有编码设置为UTF-8(独立于底层操作系统)对我们来说是一个好主意,以提供稳定的环境:

System.setProperty("file.encoding", Charsets.UTF_8.name());
System.setProperty("mail.mime.charset", Charsets.UTF_8.name());

…您根本不想关心这样的事情吗? 随意使用我们的开源Java库SIRIUS ,它通过提供简洁的fluet API发送邮件来处理所有这些工作: GitHub上的Sources 。

可以在集群管理器中找到一个用法示例:

@Partprivate MailService ms;private void alertClusterFailure() {...ms.createEmail().useMailTemplate("system-alert", ctx).toEmail(receiver).send();...}

翻译自: https://www.javacodegeeks.com/2014/06/javamail-can-be-evil-and-force-you-to-restart-your-app-server.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS制作镂空字体

1.效果图 2.html内容&#xff1a; <!doctype html><html lang"en"><head> <meta charset"UTF-8"> <title>Document</title></head><style> body{background: rgb(248,248,248);} span{font-size: 240px;…

经济危机拒绝穷潇洒 试水充电战危机

寒假充电计划寒假春节元宵&#xff1f;寒假休息睡觉&#xff1f;寒假吃饭唱歌&#xff1f;寒假看电视看书&#xff1f;寒假朋友聚会外出旅游&#xff1f;……过了这么多个寒假&#xff0c;今年这个寒假&#xff0c;似乎注定要跟往年有些不一样。因为&#xff0c;今年这个冬天冷…

常用网站

编码转换&#xff1a; http://tool.oschina.net/encode?type2&#xff08; 支持&#xff1a; Native/UnicodeNative/UTF-8Native/ASCIIURL转码&#xff09;JSON在线解析及格式化验证 https://www.json.cn/ JSON 转 Java 实体类 http://www.bejson.com/json2javapojo/new/ RGB颜…

为什么要在Java的Serializable类中使用SerialVersionUID

序列化和SerialVersionUID始终是许多Java开发人员的难题。 我经常会看到类似此SerialVersionUID的问题&#xff0c;或者如果不在我的Serializable类中声明SerialVersionUID会发生什么情况&#xff1f; 除了涉及到的复杂性和罕见的使用之外&#xff0c;这些问题的另一个原因是Ec…

关于注入(css/c.js)

这几天朋友的网站天天被搞破坏的人恶意注入&#xff0c;也许是程序没写好的原因&#xff0c;数据库每个字段加了一段script&#xff08;<Script Srchttp://%63%2Enuclear3.com/css/c.js></Script>&#xff0c;而这个script地址时不时的有变化&#xff09;。 用一些…

js判断浏览器是否支持flash的方法

传统浏览器可以使用window.ActiveXObject检查浏览器是否启用相关的控件。检查浏览器是否启用flash控件&#xff0c;需要先检查浏览器是否支持ActiveXObject&#xff0c;可以使用typeof检查window.ActiveXObject是否等于undefined&#xff0c;语法&#xff1a; typeof window.Ac…

bzoj5328: [Sdoi2018]物理实验

果然我还是太菜了&#xff0c;爆了一天才过。。。。隔壁肉丝都不知道喊了多少句哎╮(╯▽╰)╭我又A了什么傻逼题(然鹅就是wf和国集的题QWQ) 其实这个题就是个裸题&#xff0c;但是我就是不会。。。 这个题第一步就是明显的旋转坐标系(不会的百度)&#xff0c;注意要先平移坐标…

什么是Windows RT

Windows RT(WinRT) 是 Windows 8 家族的一个新成员&#xff0c;而这也是此前 Windows on ARM(WOA) 的官方名称。Windows RT 专注于 ARM 平台&#xff0c;并不会单独零售&#xff0c;仅采用预装的方式发行。Windows RT 中将包含针对触摸操作进行优化的微软 Word、Excel、PowerPo…

Spring MVC和Thymeleaf:如何从模板访问数据

在典型的Spring MVC应用程序中&#xff0c; Controller类负责使用数据准备模型映射并选择要呈现的视图。 该model map允许视图技术的完整抽象&#xff0c;对于Thymeleaf而言&#xff0c;它被转换为Thymeleaf VariablesMap对象&#xff0c;该对象使所有定义的变量可用于模板中执…

JQ css3 导航栏到底部上移

导航栏 .navigation {position: fixed;bottom: 100px;right: 100px;z-index: 100; } .navigation {transition: bottom 2s;-webkit-transition: bottom 2s; } JQ代码 var nav eval($(.navigation).offset().top - $(window).scrollTop()); $(window).on(scroll, function() {v…

SQL2005-使用openrowset 里读取excel文件

很多时候我们都知道使用.net代码去读取word,excel文档&#xff0c;但是我们如何使用sql句语里读取excel文件呢&#xff1a;SQL2005为我们提供了OPENROWSET来访问各种数据源&#xff1a;,当然我还是建议使用.net代码来读取这些文件。这里就不多说了。 我们先看一下官方的解释&am…

@RequestBody ajax 415 400

使用springmvc和Ajax进行数据交互时使用标签RequestBody时我报了这两个错&#xff0c;刚开始对springmvc的使用和注解有点迷&#xff0c;然后踩坑上了。 先说下怎么才会踩上去。首先RequestBody在一个Controller的一个方法中只能用一次&#xff0c;所以如果你使用了两次意图在一…

C#中用WebClient.UploadData 方法上载文件数据

假如某网站有个表单&#xff0c;例如(url: http://localhost/login.aspx)&#xff1a;帐号密码我们需要在程序中提交数据到这个表单&#xff0c;对于这种表单&#xff0c;我们可以使用 WebClient.UploadData 方法来实现&#xff0c;将所要上传的数据拼成字符即可&#xff0c;程…

Java中的SynchronousQueue示例–生产者使用者解决方案

SynchronousQueue是BlockingQueue的一种特殊类型&#xff0c;其中每个插入操作必须等待另一个线程进行相应的删除操作&#xff0c;反之亦然。 当您在SynchronousQueue上调用put&#xff08;&#xff09;方法时&#xff0c;它将阻塞&#xff0c;直到有另一个线程将该元素从Queue…

OnSen UI结合AngularJs打造”美团APP我的”页面 --Hybrid App

1、页面效果图&#xff1a; 演示地址&#xff1a;http://www.nxl123.cn/bokeyuan/meiTuanDemo_mine/ 2、核心代码 mine.html&#xff1a; <ons-page id"mine" ng-controller"MineController"> <!--toolbar开始--> <ons-toolbar>…

[MOSS开发]:通过简单BUG跟踪Demo阐述用户控件对列表的操作

下面的文章我想以一个具体的BUG跟踪Demo来说明MOSS的具体应用,这里面会应用到下面的知识点: 1:用户组,用户的创建,权限分配&#xff1b; 2:列表的概念以及创建&#xff1b; 3:利用用户控件来完成表单的增加加功能&#xff1b; 4:当前域用户查看自己BUG。 BUG跟踪软件在一些…

Maven的课堂笔记4

9.Maven与MyEclipse2014结合 MyEclipse10以上的版本,对Maven支持的就比较好 9.2 Myeclipse配置 本地文件夹的C盘的.m2文件夹下必须得有这个settings.xml文件 不配置这个settings.xml文件的话,myeclipse会从互联网上下载需要的jar包. 9.3 修改pom文件 添加jar包 <project xml…

vue动画

vue 提供了一些显示、隐藏一些不同的过渡&#xff0c;效果主要跟 v-if v-show 动态组件 1. vue 给动画分了 6 个过程&#xff0c;在 css 中扮演 6 个类 .v-enter  定义动画的开始状态 .v-enter-active  定义动画生效时的状态 .v-enter-to  定义动画结束是的状态 .v-leave…

基于AngularJS的Onsen UI --Onsen UI学习笔记

AngularJS与Onsen UI的结合&#xff0c;Onsen UI应用程序实际上是一个AngularJS 1应用程序。 <!doctype html><html lang"en"><head> <meta charset"utf-8"> <link rel"stylesheet" href"lib/onsen/css/…

图数据库的知识表示与推理

图形数据库及其技术生态系统可以为知识表示和推理问题提供优雅&#xff0c;有效的解决方案。 要了解这种说法&#xff0c;我们必须首先了解什么是图形。 图是一种数据结构。 图数据结构的类型很多&#xff0c;但出于本文的目的&#xff0c;我们将重点介绍一种已被称为属性图的类…