0

我正在尝试使用入站 IMAP 连接器开发 Mule 应用程序。当传入的邮件是纯文本时它工作正常,但当它是 HTML 或富文本时,有效负载中没有文本。如何使应用程序独立于传入的邮件类型?

4

2 回答 2

1

HTML 或富文本很可能是 MIME 多部分电子邮件。text/在这种情况下,只有当多部分电子邮件包含内容类型以(like )开头的第一部分时,Mule 才会尝试提取具有有效负载的文本text/plain。我认为在您的情况下,多部分电子邮件与此规则不匹配,因此 Mule 不知道如何处理它。

我建议您使用选择路由器来处理收到电子邮件后有效负载中没有文本的情况。在这种情况下,请使用与您相关的任何逻辑从已传输不同部分的入站附件之一中提取内容。

于 2012-12-20T23:18:18.677 回答
0

我已经能够编写一些 Java 代码来显示多部分消息的文本部分,但我无法找到一种方法来让它与 Mule 一起使用。MUle 想用一个字符串加载这个类,即使它是一个多部分的消息。

我写的代码如下:

import javax.activation.DataHandler;
import javax.mail.*;
public class ReadMultipartMail3 {

public String stringback(Part payload) throws Exception {
  String answer ="";

 if(payload.isMimeType("text/plain") || payload.isMimeType("text/html"))
  { 
  answer=(payload.getContent().toString());
}
     else{
 Multipart multipart = (Multipart) payload.getContent();


for (int x = 0; x < multipart.getCount(); x++) {
  Part p = multipart.getBodyPart(x);
  System.out.println("Content Type:     "+p.getContentType());
  BodyPart bodyPart = multipart.getBodyPart(x);

String disposition = bodyPart.getDisposition();

if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT))) {
 System.out.println("Mail have some attachment : ");

 DataHandler handler = bodyPart.getDataHandler();
 System.out.println("file name : " + handler.getName());
 } else {

  if(p.isMimeType("text/plain") || p.isMimeType("text/html"))
  { 
  answer = (p.getContent().toString());
  }
  else if (p.isMimeType("multipart/alternative")) 
  { 
  Multipart mp = (Multipart)p.getContent(); 
  int partsCount = mp.getCount();
  for (int z = 0; z < partsCount; z++) {
      System.out.println("Content Type:     "+z+"  "+mp.getBodyPart(z).getContentType());
      if(mp.getBodyPart(z).getContentType().contains("text/plain"))
              {answer = (String) mp.getBodyPart(z).getContent();}

  }  
}

}

 }
  }
  return answer;}}
于 2012-12-21T22:57:03.337 回答