2009-06-09 21 views
1

私はimap-serverからfetchmailでダウンロードした電子メールを処理する小さなアプリケーションを持っています。この処理は、内部にXMLファイルがあるbase64でエンコードされた添付ファイルを見つけることから成ります。Ruby TMail本体のサイズ制限はありますか?

def extract_data_from_mailfile(mailfile) 
    begin 
     mail = TMail::Mail.load(mailfile) 
    rescue 
     return nil 
    end 

    bodies_found = [] 
    if mail.multipart? then 
    mail.parts.each do |m| 
     bodies_found << m.body 
    end 
    end 

    ## Let's parse the parts we found in the mail to see if one of them 
    ## looks XML-ish. Hacky but works for now. 
    ## was XML. 
    bodies_found.each do |body| 
    if body =~ /^<\?XML /i then 
     return body 
    end 
    end 
    return nil # Nothing found. 
end 

これは素晴らしい作品が、大きなXML-ファイル(通常は> 600Kメールファイル)、この休憩に:ここで

は(多少取り除か)コードです。

>> mail.parts[1].body.size 
=> 487424 <-- should have been larger - doesn't include the end of the file 

Base64デコードは自動的には発生しません。しかし、これは手動でデコードを実行しようとしたときです。

>> Base64::decode64(mail.parts[1].body) 
[...] ll="SMTP"></Sendt><Sendt" 

これはXMLファイルの一部ですが、クリップされています。

添付ファイル全体を取得する方法はありますか?任意のヒント?

答えて

0

あなたのコードは、最初に見つかったXMLフラグメントでループを分割します。大規模なメッセージは、XMLを同じマルチパートMIMEメッセージ内の小さなチャンクに分割するのでしょうか?その後、体の配列を返し、それらを

mail.parts[1].body[0] + mail.parts[1].body[1] 

(それはロングショット、私はこれを試していないです。PS)

をCONCATう
関連する問題