【我的Segmentfault原文】https://segmentfault.com/a/1190000008054230

前言

  之所以要写这篇文章,是因为在平时工作中出现这样一种场景,领导要求用JavaMail开发邮件发送,功能开发测试好以后,发现项目用的jar包是geronimo-javamail_1.4_spec-1.3.jar,而不是Oracle官方的mail.jar,两者不能完全等同。若不清楚这点,就会出现一些不必要的麻烦。

一、关于Apache Geronimo

  一个用于企业系统开发的开源项目,你会惊讶于百度竟然没有多少可参考资料,就连百度百科上的介绍也只有几百字,谷歌上倒有不少介绍,英语不好,暂时略过。作为一个J2EE应用服务器,在Eclipse早已提供开发支持,配置截图如下:

【百度百科】

Apache Geronimo 是 Apache 软件基金会的开放源码J2EE服务器,它集成了众多先进技术和设计理念。
这些技术和理念大多源自独立的项目,配置和部署模型也各不相同。
Geronimo能将这些项目和方法的配置及部署完全整合到一个统一、易用的模型中。

  另外,好在IBM developerWorks中国上给出完整的介绍和详细的使用教程,下面介绍内容摘自IBM developerWorks中国的Geronimo 入门:(注:IBM developerWorks中国有不少关于它的技术文章,推荐参考学习)

  • Geronimo 中集成的开放源码项目|开放源码项目 |说明|

Apache Tomcat 5.5 支持 Java Servlet 2.4 和 JavaServer Pages™(JSP) 2.0 的 Web 层应用服务器
Jetty 支持 Java Servlet 2.4 和 JavaServer Pages™(JSP) 2.0 的 Web 层应用服务器 —— 可以替代 Tomcat 服务器
ActiveMQ 开放源码的 Java Message Service(JMS) 1.1 应用程序提供者,支持消息驱动 bean(MDB)
OpenEJB 开放源码的 Enterprise JavaBeans(EJB)容器系统和 EJB 服务器,支持 Enterprise JavaBeans 2.1,包括 Container Managed Persistence 2(CMP2)和 EJB Query Language(EJBQL)
Apache Axis 和 Scout 一种 Simple Object Access Protocol(SOAP)实现(Axis)和 JSR 93(JAXR)实现(Scout),用于 Web 服务和 Web Services Interoperability Organization(WS-I) Basic Profile 支持
Apache Derby 完全成熟的关系数据库管理系统(RDBMS),支持本机 Java Database Connectivity(JDBC)
  • 集成在 Geronimo 中的开放源码项目|开放源码项目 |说明|

Spring Framework 流行的应用程序框架,用于从轻量级 Inversion of Control(IoC)组件构建应用程序
ServiceMix 开放源码工具集,支持 Java Business Integration(JBI)并且为面向服务体系结构(SOA)实现提供 Enterprise Service Bus(ESB)

  当然以上介绍的内容和我要讲的内容关系不大,仅作知识普及。介绍内容好像没有提到我说的geronimo-javamail_1.4,不过从我的理解角度来讲,geronimo-javamail_1.4是Apache基于Geronimo开发的JavaMail服务组件,还有类似的servlet组件和JTA组件等,这些组件都有单独的jar包,Geronimo官网上我并没找到这些jar包,而是在outofmemory网站的Maven中央仓库找到的。(http://maven.outofmemory.cn/o...)

二、geronimo-javamail_1.4使用说明

1、jar包不全,导致邮件发送异常报错

  简单将Apache的geronimo-javamail_1.4_spec-1.3.jar等同Oracle官方的mail.jar,沿用原有代码进行邮件发送测试,出现如下异常错误信息:

javax.mail.NoSuchProviderException: Unable to locate provider for protocol: smtp at javax.mail.Session.getProvider(Session.java:237) at javax.mail.Session.getTransport(Session.java:346) 

  从报错信息来看,是缺少名为smtp的provider,信息很明确,却不知从何排查。我当时的第一反应是,两者的配置方式可能不同,但从网上大部分给出的意见是用回原来的mail.jar包(比如stackoverflow:Unable to locate provider for protocol: smtp),以致于我也开始放弃其他解决方案。但是当我将这种解决方案用在项目中,我开始产生另外一种顾虑,geronimo-javamail_1.4会不会已经在其他功能中使用了?(这个评估不到位,就可能导致不必要的风险),再者项目用的是Maven依赖库,进行jar删除操作也是一件麻烦的事,而仅加多mail.jar又会引发其他问题(参看JavaMail邮件发送不成功的那些坑人情况及分析说明的“4、jar包重叠存在javax.mail.*”)。

  于是,我又尝试搜索可能的其他解决方案,不过这次从我尝试翻墙试试谷歌,果然无意间看到了一个关于Geronimo JavaMail 1.4的官方指导说法,内容如下:(链接:http://geronimo.apache.org/ma...)

  原来是因为缺少geronimo-javamail_1.4_provider这个配套jar包,可是在stackoverflow这个专业的问答社区网站也没见人提及,这也足以说明Geronimo JavaMail 1.4确实还应用得不是很广泛。

2、jar包版本配套不兼容,导致邮件内容错误

  虽然问题是找到,但也很快出现的另外一个问题,项目使用的是geronimo-javamail_1.4_spec-1.3.jar,geronimo-javamail_1.4_provider该用哪个版本呢?我想邮件发送是基本常用功能,应该不会改动太大,代码应该是兼容的。由于没有找到官方给的配套版本说明,我就先从outofmemory网站的Maven中央仓库下载了最新的provider-1.8.3.jar。测试发现发送的邮件无标题且内容乱码,一下子抛出了一个jar包配套兼容性的问题。

  抱着试试看的想法,我又下载了provider-1.3.jar和provider-1.4.jar,结果测试都正常。这下问题来了,到底选1.3还是1.4呢?把问题和风险上报领导,领导也是举棋不定了...既然官方说明是javamail_1.4_spec-1.6.jar配套javamail_1.4_provider-1.7.jar,那javamail_1.4_spec-1.3.jar就参考配套javamail_1.4_provider-1.4.jar吧,也只能这么参考选择了...(其实也是一个不太科学的选择方法)

转载于:https://www.cnblogs.com/JackFe/p/6557367.html

使用geronimo-javamail_1.4发送邮件的有关说明相关推荐

  1. 解决java发送邮件无主题且邮件内容乱码问题

    BUG描述:本地测试,正常发送邮件.部署到linux服务器后,发送邮件无主题,无收件人,正文中是乱码(准确说是QP编码). 本以为 是服务器编码问题,各种设置编码,都不行,最终找到了原因,jar包冲突 ...

  2. Lumen / Laravel 使用网易邮箱 SMTP 发送邮件

    Laravel 是目前最流行的PHP框架,而Lumen 是 Laravel 的精简版,主要用于接口开发. Laravel 邮件发送服务基于 Symfony 组件 Swift Mailer. 本文记录了 ...

  3. iphone smtp服务器没有响应,电子邮件卡在iPhone或iPad上的发件箱?如何修复iOS中的未发送邮件 | MOS86...

    您曾经在iOS中发送电子邮件,只能将信息卡在iPhone,iPad或iPod touch的邮件应用发件箱中?你知道这是什么时候发生的,因为在iOS的Mail应用程序的底部,状态栏在iOS中显示1个未发 ...

  4. php引入PHPMailer发送邮件

    昨天做了一个发送邮件的功能,如果直接用mail()函数,需要拥有自己的邮件服务器,所有引入PHPMailer类方便快捷,简单写一下开发步骤: 一.拥有自己的邮箱账号(作为发件人邮箱) 分两种情况: 1 ...

  5. php sendmail方法,PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法

    本文实例讲述了PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法.分享给大家供大家参考,具体如下: 1.php mail()函数在windows不能用,需要安装sen ...

  6. python拆分excel的sheet为单文件_python拆分Excel表格并发送邮件

    工作中经常会出现需要将数据按一定的条件拆分并分发给不同的收件人的情况,今天就来给大家分享一下如何使用python拆分Excel表格并分发邮件. 以下表(2019年下半年销量数据表)数据为例: 首先我们 ...

  7. oracle发送邮件附件,oracle发送邮件存储过程:

    oracle发送邮件存储过程: create or replace procedure bsd_sendemail( p_receiver varchar2, p_sub varchar2, p_tx ...

  8. 【实用主义】如何用nodejs自动定时发送邮件提醒?

    需要先安装插件 npm install Nodemailer --save index.js global.SG = {nodemailer: require("nodemailer&quo ...

  9. PHPMailer类 发送邮件

    /*** [sendMail 邮件发送类]* @param [string] $address [收件人的邮件地址]* @param [string] $nickname [收件人的昵称]* @par ...

  10. 在vs2005中使用Jmail发送邮件问题

    jmail.Message Jmail = new jmail.Message(); DateTime t = DateTime.Now;             String Subject = & ...

最新文章

  1. matplotlib 标签_为折线图添加数据标签的方法,附代码
  2. multiprocessing创建自定义进程类
  3. fasttext的异步随机梯度下降导致结果不一致
  4. 交换机多少钱一个?影响工业交换机价格的因素?
  5. 【渝粤题库】广东开放大学 社会学基础 形成性考核
  6. CompareAndSwap原子操作原理
  7. redis常用命令(基础篇)
  8. 架构设计(3)---基于Nginx和Zookeeper实现Dubbo的分布式服务
  9. Python计算有向图节点的入度和出度
  10. 本地数据库_干货|本地数据库调用的实现案例
  11. CCF NOI1019 分段函数
  12. ubuntu 12.04 安装 Anjuta
  13. 学计算机拼音不好怎么办,新学期拼音学不会怎么办?送你10个妙招攻克拼音难关...
  14. ADS1115使用及其驱动电路
  15. 计算机网络13--网络应用的体系结构
  16. 出租车捧红嘀嗒?这个似乎是一个谎言
  17. python程序化交易实例-用 Python 实现你的量化交易策略
  18. 当下非常火的VR全景展示到底是什么?
  19. #pragma用法详解
  20. 欧拉函数公式及其证明

热门文章

  1. CANoe.Diva之cdd文件配置
  2. R语言抽样并验证总体分别为正态分布、均匀分布、指数分布时样本均值的抽样分布
  3. 《Maven实战》(许晓斌)导读(读书笔记第二次读后感)
  4. 江西财大计算机研究生是统考,江西财经大学计算机技术在职研究生招生简章
  5. CSP 201903-5 317号子任务 暴力30分+优化100分
  6. HDFS的机架感知(rack aware)
  7. vue项目中样式重置 自动注入less
  8. stm32 iap升级
  9. 可验证随机函数(Verifiable Random Function, VRF)
  10. 玩游戏计算机什么比较重要,台式机和笔记本玩游戏-玩游戏电脑三大件哪一个最重要? – 手机爱问...