我正在使用javamail将邮件添加到Android应用程序中的文件夹。
在这个应用程序中,我使用来自以下链接的javamail api http://code.google.com/p/javamail-android/downloads/list
我正在为此目的使用IMAP协议。
以下是我的代码。
// add atachment
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(file.getAbsolutePath());
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(file.getName());
_multipart.addBodyPart(messageBodyPart);
然后我使用下面的行将消息附加到文件夹。
try{
Log.v(tag, "Sending Mail");
f.appendMessages(msg1);
sucess_flag=1;
Log.v(tag, "Mail Send");
}
catch(Exception e)
{
e.printStackTrace();
}catch(Throwable e)
{
e.printStackTrace();
}
但我仍然没有内存异常。
我已经尝试过以下代码,但没有成功。 //添加atachment messageBodyPart = new MimeBodyPart();
FileInputStream fs=new FileInputStream(file.getAbsoluteFile());
DataSource source =new ByteArrayDataSource(fs, mimetype);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(file.getName());
_multipart.addBodyPart(messageBodyPart);
我想如果我创建Inputstream然后它将以小块发送但它不起作用。
答案 0 :(得分:0)
FileDataSource是正确的方法,或者只是使用attachFile中的newer versions of JavaMail方法。
JavaMail需要在消息附加之前确切地知道消息的大小。为此,它需要读取消息的所有数据。如果消息足够小,它将缓存此数据,以便在发送消息时不必再次读取它。默认情况下,它会尝试将整个消息缓存在内存中。您可以设置mail.imap.appendbuffersize Session property以限制将缓存的邮件的大小。