與是我的實現如下:
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了。