0

最近、oracle-javamailを介して電子メールからCSVをダウンロードするときに問題が発生しました。最初のファイルは(メインフレームサーバーから)正常に機能することがわかりましたが、2番目のcsv添付ファイルは、他のファイルと同じように明らかに.csvファイルである場合、「application/vnd.ms-excel」として表示されます。完全に正常にダウンロードします。

両方で同じコードを使用していますが、この問題に関する情報が見つかりません。

そのメールを自分宛てに送信すれば、問題なく添付ファイルを魔法のようにダウンロードできます。どんな助けでもいただければ幸いです。これが機能するようになると、別の毎日のタスクが自動化されます!

    if(content instanceof java.lang.String){
    //emailBody = (String)content;
} else if(content instanceof Multipart){
    System.out.println("is Multipart");
    Multipart mp = (Multipart)content;
    for (int j=0; j < mp.getCount(); j++) {
        Part part = mp.getBodyPart(j);
        String disposition = part.getDisposition();
        if (disposition == null) {
            // Check if plain
            MimeBodyPart mbp = (MimeBodyPart)part;
            if (mbp.isMimeType("text/plain")) {                             
                //emailBody += (String)mbp.getContent();
            } else {                            
                // Special non-attachment cases here of 
                // image/gif, text/html, ...                                
                String fileName = decodeName(part.getFileName());
                File savedir = new File(path+"\\"+fileName);
                saveFile(savedir, part);                                
            }
        } else if ((disposition != null) &&  
                (disposition.equals(Part.ATTACHMENT) || disposition.equals(Part.INLINE))){
                // Check if plain
                MimeBodyPart mbp = (MimeBodyPart)part;
                if (mbp.isMimeType("text/plain")) {                             
                    System.out.println("has disp of plain");
                    //emailBody += (String)mbp.getContent();
                } else {                            
                    System.out.println("has disp of else");
                    String fileName = decodeName(part.getFileName());
                    File savedir = new File(path+"\\"+fileName);
                    saveFile(savedir, part);                    
                }
        }
    }
}
else{
    System.out.println(message.getContentType());
}  
4

1 に答える 1

0

Javaは受信している電子メールのタイプを知っているように見えますが、そうではないことがわかります。これは標準タイプではないため、入力ストリームとして返されます。以下のコードでファイルの内容を見ることができました。

また、これがapplication / vnd.ms-excelファイルタイプとして発生した唯一の理由は、電子メールの本文が空だったためであることに注意してください。

        InputStream emailIn = (InputStream) message.getContent();
    Scanner s = null;
    try{
        s = new Scanner(emailIn).useDelimiter("\\A");
    while(s.hasNext())
        System.out.println(s.next());
    }
    finally{
        s.close();
    }
于 2013-02-18T14:00:28.973 に答える