javaMail多个收件人用分号隔开的适配问题

问题原因

问题原因不都概述,既然遇到这个问题肯定是因为接收到了习惯用分号间隔多个收件人的,但是呢,javamail默认是只识别逗号,所以就直接报错了。

解决方式

  1. 自定义InternetAddress ,很简单就是把系统的InternetAddress,所有内容都copy一份,类名换成自己定义的,比如:MyInternetAddress, 重点是里面的一个方法private static MyInternetAddress[] parse(String s, boolean strict, boolean parseHdr) throws AddressException {}
  2. 将这个方法里面逗号判断的内容复制一份,替换掉分号判断的内容。这样以后分号了就会走这个逻辑,从而实现逗号和分号的适配。当然这个地方改动可能会有风险吧。因为分号这个也有特定的功能,所以我们应该尽可能小范围的使用这个自定义的类,减少异常情况的发生。接下来是重点。
  3. 我这里是用的是MineMessage 类来接受上送的邮件内容和解析处理的。具体内容就是将head内容做了一个解析和映射,在后面获取接收人地址的是时候,就是从这个head里面获取的。根据To,Cc等标识获取对应的值。这里就是我们要做的另一个改动点。需要我们手动改一下getHeaderAddress的方法,将我们自定义的MyInternetAddress传入进去即可
//name 就是类型, To,Cc 等,直接传入就可获得对应的内容
private Address[] getAddressHeader(MimeMessage message, String name)throws MessagingException {String s = message.getHeader(name, ",");return (s == null) ? null : MyInternetAddress.parseHeader(s, true);}

这里获取到对应的多个收件人。后续的根据各自的逻辑进行。

总结

1,看似简单的处理过程,实则是经过了大量的尝试之后得到的一个方案。最开始想到的就是对字符串进行处理,但是接收到的内容整体量可能很大,处理还可能影响邮件体的文本,所以这个方案就不考虑了。然后考虑是继承MimeMessage,InternetAddress 等,但是某些类是内容是私有的,还有依赖着其它的类,不在一个包下无法获取到,也只能放弃了。只能自己实现一个InternetAddress , 代码全部复制,然后改动关键点。接下来就是想办法把自定义的接入进去。 看之前错误的发生地是在获取Address[]的时候报的错那就往前分析,分析自己用到的就是获取收件人地址而已,可以单独把那个方法拿出来,自己定义InternetAddress , ok,这时候解决方案已经很明朗了。
2,网上看了好多个博客,结果异常的相似,只是说自定义一个InternetAddress ,该里面的逻辑,后续的该如何处理没有说明,如何引入自定义的就得靠自己想办法了。
3,当有现成的方案可以帮自己解决问题的时候,我们就会选择最容易的那条路,而忽略的深入地思考。所以,珍惜遇到的每一个困难,那是成长的磨刀石。

javaMail多个收件人分号隔开的适配相关推荐

  1. java mail 抄送多用户,JavaMail 发送邮件,收件人为多人,抄送多人。其中包含收件人邮箱错误时的处理...

    1.给客户做一个发邮件的功能.收件人和抄送人可能为单个人,也可能为多个人.但是当收件人或抄送人中某一个邮箱的格式错误时,整个邮件发送就会出错停止发送.但我还需要给那些其余的人发邮件,该怎么办? 2.解 ...

  2. JavaMail 发送邮件,收件人为多人,抄送多人。其中包含收件人邮箱错误时的处理

    1.给客户做一个发邮件的功能.收件人和抄送人可能为单个人,也可能为多个人.但是当收件人或抄送人中某一个邮箱的格式错误时,整个邮件发送就会出错停止发送.但我还需要给那些其余的人发邮件,该怎么办? 2.解 ...

  3. 正则验证多个邮箱用分号隔开

    代码如下: <script>     var str = 'xxxx@126.com;123234234@qq.com;xxxxx@xxxxx.con.cn';     var reg = ...

  4. java 循环拼接字符串用分号隔开_Java 8中字符串拼接新姿势:StringJoiner

    在为什么阿里巴巴不建议在for循环中使用"+"进行字符串拼接一文中,我们介绍了几种Java中字符串拼接的方式,以及优缺点.其中还有一个重要的拼接方式我没有介绍,那就是Java 8中 ...

  5. matlab 输出矩阵 逗号隔开,在MATLAB中自定义矩阵时,矩阵同行元素之间用逗号隔开,而每一行元素之间用分号隔开。...

    [判断题]创意摄影可以一味地强调奇特怪异的想法表现,不需要主题鲜明.目标清晰.只要摄影人本身懂其意思即可. [判断题]人工堆场的堆放高度可以达到10米 [多选题]画面中另类.夸张的视觉效果是怎样营造出 ...

  6. 关键词是用分号还是逗号隔开_逗号、顿号、分号、冒号、破折号的用法

    [版权声明] 版权归属原作者,仅供学习参考之用,禁止用于商业用途.部分文章推送时未能及时与原作者取得联系,如有侵权请联系删除,感谢您的支持! 以下正文 常用的标点符号可以分为句内标点和句末标点.句内标 ...

  7. 基于echarts+js+fexible.js实现的数据可视化适配案例(附源代码)

    介绍 数据可视化 :借助于图形化手段,清晰有效地传达与沟通信息 ECharts:是一个使用JavaScript实现的开源可视化库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器,底层依赖矢量 ...

  8. Swift语言指南(二)--语言基础之注释和分号

    Swift语言指南(二)--语言基础之注释和分号 原文:Swift语言指南(二)--语言基础之注释和分号 注释 通过注释向自己的代码中注入不可执行的文本,作为你自己的笔记或提示.Swift编译器运行时 ...

  9. 关于SQL语句中分号的问题

    SQL语句要不要加分号? 在w3cschool中是这样说明的: 某些数据库系统要求在每条 SQL 命令的末端使用分号.在我们的教程中不使用分号. 分号是在数据库系统中分隔每条 SQL 语句的标准方法, ...

最新文章

  1. 常见字符串和数值间得转换
  2. bootstrap -- 一个标签中,同时有 col-xs , col-sm , col-md , col-lg
  3. 【Python学习】 - pyecharts包 - 地图可视化
  4. 设备管理器android感叹号,设备管理器其他设备感叹号
  5. 常用的redis命令
  6. 服务器协议stp,“STP”是“Server Time Protocol”的缩写,意思是“服务器时间协议”...
  7. iOS开发实践之网络检測Reachability
  8. 苹果cms小主题模板
  9. Android原生开发如何深入进阶?完整版开放下载
  10. java中的Environment类
  11. 微信公众号自动回复海报
  12. MRCP协议-提供语音识别(ASR)与语音合成服务(TTS)
  13. kafka自带的zk启动_kafka单机安装和启动
  14. 一篇关于GPS定位写得最详实清晰的文章之一
  15. SpringCloud—笔记(三)高级篇
  16. 织梦php实现评论,织梦文章评论功能的使用
  17. IntelliJ IDEA中的disconnect和terminate
  18. 实战|Python轻松实现绘制词云图(附详细源码)
  19. 【图像处理】双眼去掩蔽
  20. 淘宝新手开店不使用直通车,应该怎么去进行做呢?

热门文章

  1. 实用级北斗+AI道路智能巡检系统,千寻驰观如何助力精细化公路养护决策
  2. MOS管热阻的测量方法
  3. 论背景调查,《长安十二时辰》的大案牍术可比不上现在
  4. 详细判断浏览器运行环境
  5. java call.invoke,关于_call.invoke 时出现错误,呼唤专家
  6. 且听穿林打叶声———Ashmem机制讲解
  7. 共轭梯度法(FR法)
  8. 跟着鬼哥学PyQtPart.3
  9. 关于模型与视口相切与视图最大化的方法
  10. C++11拉达姆lamda的使用以及注意事项