我正在尝试使用入站IMAP连接器开发Mule应用程序。当传入的邮件是纯文本时,它工作正常,但当它是HTML或富文本时,有效负载中没有文本。如何使应用程序独立于传入的邮件类型?
答案 0 :(得分:1)
HTML或Rich Text很可能是MIME多部分电子邮件。在这种情况下,仅当多部分电子邮件包含具有以text/
开头的内容类型的第一部分(如text/plain
)时,Mule才会尝试提取文本的有效负载。我认为在您的情况下,多部分电子邮件与此规则不匹配,因此Mule不知道如何处理它。
我建议您使用选择路由器来处理收到电子邮件后有效负载中没有文本的情况。在这种情况下,请使用与您相关的任何逻辑从其中一个已转移了不同部分的入站附件中提取内容。
答案 1 :(得分:0)
我已经能够编写一些Java代码来显示多部分消息的文本部分,但是我无法找到使用Mule的方法。 MUle想要使用String加载类,即使它是多部分消息。
我写的代码如下:
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;}}