Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中解析来自多部分邮件内容字符串的附件_Java_Parsing_Email - Fatal编程技术网

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

在java中解析来自多部分邮件内容字符串的附件,java,parsing,email,Java,Parsing,Email,我正在测试一个在集成环境中发送带有附件的邮件的应用程序。为此,我设置了一个假的smtp邮件服务器(http://quintanasoft.com/dumbster/)并将我的应用程序配置为使用它。在测试结束时,我想检查我的应用程序是否通过我的假邮件服务器发送了电子邮件,还想知道内容(至少是附件)是否正是我所期望的 Dumpster将这些邮件包装到它自己的对象中,其中只包含标题键值对和纯文本形式的正文。我的问题是如何轻松地分割邮件正文,从中获取并评估附加的文件内容。作为开始的地方(不确定是否有更简

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

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

作为开始的地方(不确定是否有更简单的方法),请考虑使用JavaMail API。尝试获取整个消息(包括标题)——可能使用

SmtpMessage.toString()
,将其包装在一些
新的ByteArrayInputStream(SmtpMessage.toString().getBytes())
,并将其传递给
javax.mail.internet.mimessage

(注意:我对MIME标准不太熟悉,我不知道您是否应该在这里使用
getBytes(Charset)
重载)。

附加一个文件,说明您在javamail中确定MIME类型。通过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)));
}
private static final String YOUR_attachmetn_DATA=“Content Type:image/jpeg;name=Invoice.jpgContent-Transfer-Encoding:base64内容处置:附件;filename=image.jpg”;
@以前
public final void setup()引发UserException{
server=simplestpserver.start();
}
@之后
公开最终作废拆卸(){
server.stop();
}
@试验
已接收附件的公共无效测试()引发IOException、MessaginException{
email=getMessage();
YourEmailSendingClass.sendEmail(电子邮件);
迭代器it=server.getReceivedEmail();
SMTPMessageReceivedMessage=(SmtpMessage)it.next();
assertTrue(receivedMessage.getBody.contains(您的附件数据));
}
这是另一个页面,上面有人做了类似的事情,更详细。