2010-11-18 181 views
3

javamailを使用してメール処理を自動化しています。javamailを使用して添付ファイルの内容を取得する

私はpop3サーバーへの接続を取得し、メッセージを取得しました。それらの一部には添付ファイルが含まれています。メールのタイトルに基づいて私はフェッチする必要がある添付ファイルのファイル名を "予測"することができます。

しかし、私は、私は機能は非常にうまく機能

public byte[] searchForContent(Part part,String fileName){ 
    if(part.getFileName()!=null){ 
     if(part.getFileName().equals(fileName)){ 
      byte[] content = new byte[part.getSize()]; 
      part.getInputStream().read(content); 
      return content[] 
     } 
    } 
    return null; 
} 

機能を持っているその内容:(

を取得することはできません(例:一部のファイル名で記述添付した場合にのみ、リターン・コンテンツ) 。しかし、アレイのリターンが大きすぎる。

ダウンロードした添付ファイルは、256バイト長で、機能は352バイト長の内容を返す。

私は股関節を考えます問題はヘッダから来ていますが、私は確信が持てません。

どのようにコンテンツを取得するのですか?

ありがとうございます。何が価値があるために

+0

だから以下のコードは、期待される結果を与えるのでしょうか?指定されたファイルが作成されますか?もしそうなら、どうすれば大きすぎるのですか? –

+0

私のデスクトップに添付ファイルをダウンロードしてサイズを確認すると、256バイトになります。しかし、同じ添付ファイルの場合、このコードを実行すると、返される配列の長さは352バイトになります。 – almathie

答えて

0

最終的に解決策が見つかりました。

eajによると、part.getSize()は、パーツオブジェクトのサイズを返します。添付ファイル自体のサイズではありません。

ただし、part.getInputStream()によって返されるInputStreamには、添付ファイルの内容のみが含まれます。あなたはあまりにも大きな意味ですか何

public byte[] searchForContent(Part part,String fileName){ 
    if(part.getFileName()!=null){ 
     if(part.getFileName().equals(fileName)){ 
      InputStream stream=part.getInputStream(); 

      byte[] buffer = new byte[512]; 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

      int bytesRead; 
      while ((bytesRead = stream.read(buffer) != -1) 
      { 
       baos.write(buffer, 0, bytesRead); 
      } 
      return baos.toByteArray(); 
     } 
    } 
    return null; 
} 
0

は、javax.mail.Part.getSize()のAPIドキュメントは、サイズがコンテンツのサイズの正確な測定値でない場合があり、コンテンツの転送エンコーディングをない場合があること

注意を言います。このサイズは、ユーザにこのパーツのサイズの大まかなアイデアを与えるためのユーザインタフェースにおける表示に適している。

コンテンツの種類を知っていると仮定すると、おそらくPart.getContent()から取得して処理することができます。 getContent()はObjectを返しますが、コンテンツタイプが分かっていれば、それを適切にキャストすることができます(例えば、テキスト用のString)。

関連する問題