javamail發信帶附件的問題

        做過很長時間的郵件解析功能,對於javamail及郵件eml處理還是比較熟悉。今天有個需求實現發信,並帶有附件。項目中對於文件上傳,使用apache自帶的DiskFileUpload類。發送郵件時可以得到InputStream流。對於一個附件,其即爲一個bodypart,對於part的封裝使用MimeBodyPart,發現MimeBodyPart中構造函數有MimeBodyPart(InputStream is),
        與是我的實現如下:
        MimeBodyPart body = new MimeBodyPart(is);
        body.setFileName(MimeUtility.encodeText(name));(MimeUtility.encodeText方法是爲了附件名字的中文問題);
          通過以上發送郵件成功了,但是在查看附件時發現前面的內容有丟失,多試幾次以後,發現有些會出現亂碼。查看MimeBodyPart(InputStream is)是對郵件part的流的解析。這樣就相當把附件的內容做爲part的去解析了,從而引起的錯誤。仔細查看API,只有body.setDataHandler(FileDateSource)方法來實現的,但FileDataSource卻無InpusStream構造,在此迷惑了一陣子。查看資料後,發現FileDataSource實現了DataSource接口,用ByteArrayDataSource代替即可。
與是新實現如下:
        DataSource datasource = new DataSource(new ByteArrayDataSource(is,ctype));

        body.setDataHandler(datasource);

        通過以上實現發信帶附件OK了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章