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

JavaMail 默认仅识别逗号分隔的收件人,但实际中可能遇到分号隔开的情况导致报错。解决方法是创建自定义的 MyInternetAddress 类,修改关键方法以适配分号。同时在 MineMessage 中调整 getHeaderAddress 方法,传入自定义类,确保正确解析多个收件人。此问题的解决经过了多次尝试,避免了对邮件内容的大量处理和对核心类的直接继承。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值