通过mime4j解析电子邮件附件

时间:2010-04-20 14:16:13

标签: java perl smtp mime

我正在使用一个小的java smtp库(http://code.google.com/p/subethasmtp/),因此我需要在单独的组件中解析传入的电子邮件,即正文,附件等。

我正在尝试使用mime4j,但文档建议mime4j只能提供事件通知或令牌通知,而不是其他任何内容。为了剥离正文和附件等,我必须在事件处理程序中使用我自己的自定义逻辑。我的观察是否正确?

如果是,那么我如何使用mime4j来满足我的要求。请建议。

我非常需要一种接收smtp数据流的方法,并在java中以完全解析的形式返回一系列附件引用或流。请帮忙。

提前致谢

Ashish Sharma

2 个答案:

答案 0 :(得分:9)

Mime4j绝对可以满足您的需求。创建org.apache.james.mime4j.message.SimpleContentHandler的子类,并实现bodyDecoded方法。然后将此子类传递给MimeStreamParser实例。你会看到bodyDecoded每个主体或附件被调用一次,它给你的流包含已经执行过Base64或Quoted-Printable解码的数据。

如果您不喜欢基于事件的API,则可以尝试通过org.apache.james.mime4j.message.Message类公开的更多类似DOM的功能。你可以调用Message.getBody()然后看看它给你的回复是Multipart,TextBody,BinaryBody等实例。如果是Multipart,那么你可以调用Multipart.getBodyParts来递归到子部分。

答案 1 :(得分:2)

@Ashish,因为你使用SubEthaSmtp的另一个选择是做SubEtha邮件列表管理器做的事情:http://code.google.com/p/subetha/source/browse/trunk/src/org/subethamail/common/SubEthaMessage.java

链接类扩展了SMTPMessage,它有一堆getPart()方法。 javax.mail.Part具有将附件转换为文件所需的大部分内容。