2010-04-20 119 views
5

我用一个小的Java SMTP库(http://code.google.com/p/subethasmtp/),解析这个我需要解析单独的部件收到的邮件即正文,附件等电子邮件附件通过mime4j

我想使用mime4j,但该文档建议mime4j只能提供事件通知或令牌通知,而不是别的。对于剥离身体和附件等,我不得不在事件处理程序中使用自己的自定义逻辑。我的观察是否正确?

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

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

在此先感谢

阿希什·夏尔马

+0

同时,在自我调查中,我发现在amavisd-new中使用了perl库MIME :: PARSER。来自amavisd-new的邮件列表人员告诉我,像我需要的解码邮件对象可以从amavisd-new perl脚本引用,但是有可能我可以使用它从perl到java? – 2010-04-27 19:00:42

+1

我遇到了同样的问题,同时谷歌在这个地方发现了你的名字(邮件列表,论坛)。谢谢你节省我的时间! – 2011-06-06 20:24:24

回答

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来递归到子部分。

+0

感谢您的建议,现在我面临的问题是重新创建从iPhone发送的邮件,邮件标题有“X-Mailer:iPhone Mail(7D11)”,任何人都可以告诉我什么自定义逻辑我需要考虑发送的邮件通过iphones。 – 2010-05-02 18:06:53

+0

解决了所有问题mime4j比java mail api的工作好得多。 – 2012-02-06 09:47:53

2

@Ashish其他的选择,因为你正在使用SubEthaSmtp是做什么SubEtha邮件列表管理者做:http://code.google.com/p/subetha/source/browse/trunk/src/org/subethamail/common/SubEthaMessage.java

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

+0

Adam,目前我正在使用Java邮件API来解析电子邮件,以将邮件正文和附件分离为单独的文件。我正在寻找mime4j的原因是,java邮件API有时会失败,并且对于严重格式化的MIME消息(我的经验)并不容错,而mime4j承诺这么做。所以作为替代方案,我正在研究mime4j。我会很快发布我的详细结果。 – 2011-06-08 06:49:25

+0

Adam,mime4j绝对是java邮件API的一个更好的选择,它为实现提供了干净的接口。我用mime4j(0.7)的测试结果非常好。 – 2011-10-10 15:52:24