当前位置: 首页 > 知识库问答 >
问题:

Javamail解析7bit Content-Transfer-Encoding的电子邮件正文

耿星雨
2023-03-14

我已经实现了一个读取电子邮件文件的功能。如果文件有附件,则返回附件名称。现在我使用Javamail库来解析电子邮件文件。这是我的代码。

    public static void parse(File file) throws Exception {
    InputStream source = new FileInputStream(file);
    MimeMessage message = new MimeMessage(null, source);
    Multipart multipart = (Multipart) message.getContent();
    for (int i = 0; i < multipart.getCount(); i++) {
        BodyPart bodyPart = multipart.getBodyPart(i);
        String disposition = bodyPart.getDisposition();
        if (disposition != null
                && disposition.equalsIgnoreCase(Part.ATTACHMENT)) {
            System.out.println("FileName:"
                    + MimeUtility.decodeText(bodyPart.getFileName()));
        }
    }
}

它工作得很好,但是当电子邮件文件具有7bit Content-Transfer-Encoding时,BodyPart.getFileName()会产生NullPointerException。当电子邮件是7bit内容传输编码时,有没有办法获得附件名称?对不起,我的英语太差了。

编辑:这里是关于我的测试文件的一些信息。(X-Mailer:Emacs 21.3/Mule 5.0上的Mew 2.2版(SAKAKI));(MIME-版本:1.0):(内容-类型:多部分/混合);(内容传输编码:7位)

共有1个答案

祁修诚
2023-03-14

如果我的答案不起作用,请显示堆栈跟踪。

使用一个会话,因为它可能是唯一为空的东西。

Properties properties = new Properties();
Session session = Session.getDefaultInstance(properties);
MimeMessage message = new MimeMessage(session, source);
 类似资料:
  • Transfer-Encoding头指定用于将安全地传输编码的形式的实体提供给用户。 Transfer-Encoding是一种逐跳报头,即应用于两个节点之间的消息,而不是资源本身。多节点连接的每个段可以使用不同的Transfer-Encoding值。如果要在整个连接上压缩数据,请改为使用端到端标Content-Encoding头。 当出现在对HEAD没有主体的请求的响应中时,它指示将应用于相应GE

  • 问题内容: 是否有人熟悉Java库,该库有助于解析以下电子邮件的字段(日期,主题,从,到)? 问题答案: JavaMail是一个Oracle库,它在javax.mail软件包中提供邮件服务和与邮件相关的服务(例如解析常规邮件和MIME邮件)。另外,Apache有一个用于处理邮件的Commons Email 库。 在JavaMail API中,解析包含电子邮件消息的字符串(可能是或可能不是明确的MI

  • 我有一个perl脚本,使用MIME::E邮件来解析从stdin收到的电子邮件,但它不适用于没有部件的电子邮件。我没有能力在电子邮件发送前修改它们。 我希望能够识别电子邮件的重要部分,不管它是超文本标记语言还是文本,并将其存储在缓冲区中以便以后处理。这些电子邮件中的许多来自自动生成的邮件列表。 有时,它们似乎只有一个“内容类型”:没有边界的标题。 其他时候,它们有多个文本/普通部分,其中一个是电子邮

  • 问题内容: 我正在编写一个Python脚本来处理Procmail返回的电子邮件。如该问题中所建议,我正在使用以下Procmail配置: 我的process_mail.py脚本正在通过stdin接收电子邮件,如下所示: 我正在尝试以这种方式解析消息: 我想获取诸如“发件人”,“收件人”和“主题”之类的消息字段。但是,消息对象不包含任何这些字段。 我究竟做错了什么? 问题答案: 您必须确保这些行不会意

  • 我已经尝试了整整一周使用antlr构建一个语法,允许我解析电子邮件消息。 我的目标不是将整个电子邮件彻底解析为令牌,而是将其分解为相关部分。 这是我必须处理的文档格式。描述不属于消息一部分的内联注释: 我面临的问题如下: 我没有想出一个好方法来跳过消息开头的文本,并在找到标记后才开始应用解析规则。截面类型1 捕获节开始和句子标记之间节内的所有文本 在SECTION\u结束标记之后,忽略后面的所有文

  • 目前,我的代码使用IMAP(imaps)和JavaMail访问我的Gmail收件箱,目的是阅读从最新到最旧发送给我自己的电子邮件,识别哪些电子邮件具有. zip或. xap格式的附件。如果找到,电子邮件的主题会显示出来,并询问我是否要下载附件。 如果我单击否,它会继续搜索。如果我单击是,它会调用createFolder方法来创建一个目录,将附件保存在那里,然后提取它。 问题:我收件箱中最近的一封电