在配置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

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

  1. javamail程序源码_JavaMail可能是邪恶的(并迫使您重新启动应用程序服务器)

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

  2. J2EE达内18天笔记

    J2EE模式 Value Object(值对象)  用于把数据从某个对象/层传递到其他对象/层的任意Java对象. 通常不包含任何业务方法. 也许设计有公共属性,或者提供可以获取属性值的get方法. ...

  3. JavaMail简易教程

    声明,本文转载自 narilee 的 Blog JavaMail API简介 JavaMail API是一种可选的.能用于读取.编写和发送电子消息的包(标准扩展).您可使用这种包创建邮件用户代理(Ma ...

  4. [转载]JavaMail API简介

    JavaMail API简介 JavaMail API是一种可选的.能用于读取.编写和发送电子消息的包(标准扩展).您可使用这种包创建邮件用户代理 (Mail User Agent ,MUA) 类型的 ...

  5. JavaMail API

    JavaMail API是一种可选的.能用于读取.编写和发送电子消息的包(标准扩展).您可使用这种包创建邮件用户代理(Mail User Agent ,MUA) 类型的程序,它类似于Eudora.Pi ...

  6. JavaMail API 详解

    JavaMail API是一种可选的.能用于读取.编写和发送电子消息的包(标准扩展).您可使用这种包创建邮件用户代理(Mail User Agent ,MUA)类型的程序,它类似于Eudora.Pin ...

  7. JavaMail详解

    引用自http://blog.sina.com.cn/s/articlelist_1832656582_7_1.html [JavaMail]1 基础 A.简介 JavaMail,顾名思义,提供给开发 ...

  8. JavaMail 学习讲解

    原博客地址:http://blog.csdn.net/perfect2011/article/details/19193841 [JavaMail]1 基础 A.简介 JavaMail,顾名思义,提供 ...

  9. JavaMail 之 搜索邮件

    JavaMail在javax.mail.search包中定义了一个用于创建搜索条件的SearchTerm类,应用程序创建SearchTerm类的实例对象后,就可以调用Folder.Search(Sea ...

最新文章

  1. java 协议栈_深入浅出讲解低功耗蓝牙(BLE)协议栈
  2. 实现简单 codeigniter 缓存 (cache)
  3. TCGA(三)--采用GDC API进行数据查询和获取
  4. Java 并发编程之线程池 ExecutorService 接口
  5. 【南邮操作系统实验】银行家算法Java版
  6. android jni示例_Android CollapsingToolbarLayout示例
  7. 高等数学-第一章 函数 极限 连续
  8. 第四章 INI配置——《跟我学Shiro》[张开涛]
  9. 遗传算法多维matlab,MATLAB遗传算法
  10. 入秋的第一篇数据结构算法:看看归并与快排的风采
  11. html消除自带边距,CSS3中清除外边距、内边距margin,padding使用方法
  12. ThinkPad 笔记本BIOS设置手册
  13. 中台详解(上)-什么是中台
  14. android 页面回滚焦点位置 解决方案
  15. Java8之深克隆与浅克隆
  16. python数据透视表对各列统计_EXCEL怎么制作数据透视表对数据进行分类统计?
  17. 电子邮件格式是什么,你知道电子邮件在哪里找吗
  18. WHQL徽标认证申请流程
  19. 腾讯游戏助手运行闪退日志查看
  20. html设置网站图标favicon.ico【带在线图标制作网址】

热门文章

  1. CV中多的空格导致报错
  2. Mybatis中连接池介绍
  3. php移动代码,移动专区周级收录如何提交 复制这段php代码即可
  4. 公式冒号是什么意思_三角学中,这么一堆公式其实就说了2个事而已
  5. php accesscontrolalloworigin,设置Access-Control-Allow-Origin实现跨域访问
  6. echarts line 去掉最外围方框_干货 | 关于射频芯片最详细解读
  7. servlet session持久化
  8. 用Python开始机器学习(4:KNN分类算法)
  9. import openfire4.0.2 source code in eclipse
  10. cuba 平台_CUBA 7的新功能