从java中的多部分邮件内容字符串解析附件

时间:2011-01-25 16:03:18

标签: java parsing email

我正在测试在集成环境中发送带附件的邮件的应用程序。为此,我正在设置一个虚假的smtp邮件服务器(http://quintanasoft.com/dumbster/)并配置我的应用程序以使用它。在我的测试结束时,我想检查我的应用程序是否通过我的假邮件服务器发送了电子邮件,并且还想知道,如果内容(至少是附件)正是我期待的那样。

Dumpster将这些邮件包装到自己的对象中,这些对象只包含标题键值对,而正文包含纯文本。我的问题是我如何轻松地分配邮件正文以从中获取和评估附加的文件内容。

2 个答案:

答案 0 :(得分:2)

在javamail中附加您确定mime-types的文件。通过smtp发送电子邮件允许我们利用在文件的字节之前电子邮件正文中有一串数据的事实。该文件的字节为base64,并包含在电子邮件字符的主要块中。

private static final String YOUR_ATTACMETN_DATA = "Content-Type: image/jpeg;    name=Invoice.jpgContent-Transfer-Encoding: base64Content-Disposition: attachment; filename=image.jpg";
@Before
public final void setup() throws UserException{
    server = SimpleSmtpServer.start();
}
@After
public final void tearDown(){
   server.stop();
}
@Test
public void test_that_attachment_has_been_recieved() throws IOException, MessagingException {
    email = getMessage();
    YourEmailSendingClass.sendEmail(email);
    Iterator<SmtpMessage> it = server.getReceivedEmail();  
    SmtpMessage recievedMessage = (SmtpMessage)it.next();
    assertTrue(recievedMessage.getBody.contains(YOUR_ATTACHMENT_DATA)));
}

这是另一个是更详细地做了类似事情的人的页面。 http://www.lordofthejars.com/2012/04/why-does-rain-fall-from-above-why-do.html

答案 1 :(得分:0)

作为一个开始的地方(不确定是否有更简单的方法),请考虑使用JavaMail API。尝试抓取整个消息(包括标题) - 可能使用SmtpMessage.toString(),将其包装在某些new ByteArrayInputStream(smtpMessage.toString().getBytes())中,然后将其传递给javax.mail.internet.MimeMessage。 (注意:我不熟悉MIME标准,我不知道你是否应该在这里使用getBytes(Charset)重载。)