JAVA mail MimeUtility.quote 函数抛出 NULL Pointer Exception.

25 篇文章 0 订阅

帐 前卒今天遇到 JAVA mail MimeUtility.quote 函数抛出 NULL Pointer Exception 问题。找这个问题的确废了一番功夫:看栈信息,看源码,debug.  然后终于发现了问题的原因:

在Email里MimeBody中有这样一行:

Content-Type: application/octet-stream; name=""

这句话相当的神奇,让JavaMail抛出NPE. 但是这个问题是JavaMail这个库有问题,还是这封email没有遵循rfc规范?

于是帐前 卒 找了一下rfc文档,在rfc 2045中找到了5.1章,发现如下内容:

value := token / quoted-string

token := 1*<any (US-ASCII) CHAR except SPACE, CTLs,
                 or tspecials>

tspecials :=  "(" / ")" / "<" / ">" / "@" /
                   "," / ";" / ":" / "\" / <">
                   "/" / "[" / "]" / "?" / "="
                   ; Must be in quoted-string,
                   ; to use within parameter values

这是语法定义。这里说,对于Content-Type header域的词法定义中,明确写了,不应该为空。那么JavaMail在这里发现为空抛出Exception也是理所应当。所以错在发信方。看到这里,那封不能被很好解析的邮件该怎么丢弃就怎么丢弃吧。然后把这个bug反馈给发信方。所以软件开发...还是需要时不时的看看rfc呀...


另外上面的问题是在获取Multipart p后,调用p.getContent(); 或者 p.getDataHandler()或者 p.getInputStream()方法时,抛出的Null Pointer Exception.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值