微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Java使用bodyPart.isMimeType“ message / rfc822”读取.mgs附件

如何解决如何使用Java使用bodyPart.isMimeType“ message / rfc822”读取.mgs附件

我不是Java方面的专家。 我更新了现有Java Web应用程序中的某些功能。 我的应用程序读取.eml文件,并将附件保存在本地服务器上。 现在,当附件为味精时,我有两个问题:

  1. 文件名为空
  2. 我没有正确阅读内容类型“ message / rfc822”

这是我的代码

import javax.mail.internet.*;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;

public class MailUtility {

    public static String[] displayEML(String emlID,String folder) throws Exception{
        
        String[] mymessageArray = null;
        String myyear = folder.substring(0,4);
        String mymonth = folder.substring(4,6);
        String myday = folder.substring(6,8);
        String folderpath = myyear + "/" + mymonth + "/" + myday;
        
         //LINUX PATH
         String mypath = "/opt/tomcat/webapps/MyWebApp/attachments/";       
         String mypathHref = "attachments\\";
         String emlFile = "/opt/externalemails/" + folderpath + "/" + emlID + ".eml";
         System.out.println("**** emlFile: " + emlFile);
         
         Properties props = new Properties();
         Session mailSession = Session.getDefaultInstance(props,null);
         InputStream source = new FileInputStream(emlFile);
         MimeMessage message = new MimeMessage(mailSession,source);
             
         Address[] emlFrom = message.getFrom();
         String email = emlFrom == null ? null : ((InternetAddress) emlFrom[0]).getAddress();
         String priority = "normal";
         String emlBody = "";
         String emlAttach = "";
         
         if(message.getHeader("X-Priority","")!=null) {
             if(message.getHeader("X-Priority","").startsWith("1")) {
                 priority = "<b><font color=\"red\">Highest</font></b>";     
             }
         }
         
         //view header info (Sender,Objbect,Data)
         String myTable = "<table><font face=\"Courier New\" >";
         myTable = myTable + "<tr><td><B>From:</B></td><td>" + email +"</td></tr>";
         myTable = myTable + "<tr><td><B>Received Data:</B></td><td>" + message.getSentDate()+"</td></tr>";
         myTable = myTable + "<tr><td><B>Priority:</B></td><td>" + priority +"</td></tr>";
         myTable = myTable + "<tr><td><B>Subject:</B></td><td>" + message.getSubject() + "</td></tr>";
         
            if (message.isMimeType("text/plain")) {
                emlBody = ConvertTextPlanToHTML(message.getContent().toString());
            } else if(message.isMimeType("text/html")) {
                emlBody = message.getContent().toString();
            } else if (message.isMimeType("multipart/*")) {
            
                MimeMultipart mimeMultipart = (MimeMultipart) message.getContent();
                emlBody = getTextFromMimeMultipart(mimeMultipart);  
             
                Multipart multiPart = (Multipart) message.getContent();
                int numberOfParts = multiPart.getCount();
              
                for (int partCount = 0; partCount < numberOfParts; partCount++) {
                    MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
                    
                    if(part.getFileName()!=null) {
                        String strAttachment = "";
                        //getfilename and remove invalid characters in the name
                        String myFileName = MimeUtility.decodeText(part.getFileName()).replaceAll("[\\\\/:*?\"<>|]",""); 
                                                            
                        String myPathSave = mypath + myFileName;
                        String myPathHref = mypathHref + myFileName;
                                                
                        try {
                            if (partCount==1) {
                                strAttachment = "<B>Attachment:</B>";
                            } else {
                                strAttachment = "";
                            }
                            part.saveFile(myPathSave);  
                            emlAttach = emlAttach + "<tr><td>" + strAttachment + "</td><td><a href=\"" + myPathHref + "\" target=\"_blank\">"+ myFileName +"</a></td></tr>";
                        } catch (IOException exc) {
                            System.out.println(exc.toString());
                        }
                    }
                }  
        } 
            
         myTable = myTable + emlAttach + "</font></table><br/>";
         mymessageArray = new String[]{myTable,emlBody};
         return mymessageArray; 
     }
     
    //function to convert Text/Plan format in HTML
    public static String ConvertTextPlanToHTML(String s) {
        StringBuilder builder = new StringBuilder();
        boolean prevIoUsWasASpace = false;
        for( char c : s.tochararray() ) {
            if( c == ' ' ) {
                if( prevIoUsWasASpace ) {
                    builder.append("&nbsp;");
                    prevIoUsWasASpace = false;
                    continue;
                }
                prevIoUsWasASpace = true;
            } else {
                prevIoUsWasASpace = false;
            }
            switch(c) {
                case '<': builder.append("&lt;"); break;
                case '>': builder.append("&gt;"); break;
                case '&': builder.append("&amp;"); break;
                case '"': builder.append("&quot;"); break;
                case '\n': builder.append("<br>"); break;
        //      case '*': builder.append("<b>"); break;
                // We need Tab support here,because we print StackTraces as HTML
                case '\t': builder.append("&nbsp; &nbsp; &nbsp;"); break;  
                default:
                    if( c < 128 ) {
                        builder.append(c);
                    } else {
                        builder.append("&#").append((int)c).append(";");
                    }    
            }
        }
        return builder.toString();
    }
    
    // function to read email multipart 
     private static String getTextFromMimeMultipart(MimeMultipart mimeMultipart) throws MessagingException,IOException{
            String result = "";
            String result2 = "";
            int count = mimeMultipart.getCount();
            
            for (int i = 0; i < count; i++) {
                BodyPart bodyPart = mimeMultipart.getBodyPart(i);
                Object o = bodyPart.getContent();
                
                if (o instanceof Multipart) {
                    Multipart mp = (Multipart)o;
                    for (int j = 0; j < mp.getCount(); j++) {
                        BodyPart b = mp.getBodyPart(j);
                        // Loop if the content type is multipart then get the content that is in that part,// make it the new container and restart the loop in that part of the message.
                        if (b.getContentType().contains("multipart")) {
                            mp = (Multipart)b.getContent();
                            j = -1;
                            continue;
                        }
                   
                        if(!b.getContentType().contains("text/html")) {
                            continue;
                        }

                        Object o2 = b.getContent();
                        if (o2 instanceof String) {
                            result = result + b.getContent();
                        }
                    }
                 }
                 
                if (bodyPart.isMimeType("text/plain")) {
                        result = ConvertTextPlanToHTML(bodyPart.getContent().toString());
                } else if (bodyPart.isMimeType("text/html")) {
                       result = bodyPart.getContent().toString();
                } else if (bodyPart.getContent() instanceof MimeMultipart){
                    result = getTextFromMimeMultipart((MimeMultipart)bodyPart.getContent());
                } else if (bodyPart.isMimeType("message/rfc822")){  //message/rfc822
                    /*
                       How can read bodyPart when is "message/rfc822"
                    */
                }
            }
             return result + result2;
        }    
} 

请问有什么例子可以帮助我解决我的问题吗? 感谢您的帮助。

马可

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?