使用GMailSender从Android应用程序发送带附件的电子邮件在Transport.send失败

时间:2011-12-17 23:15:33

标签: java android gmail email-attachments javax.mail

我正在尝试从我的Android应用程序发送带有图像作为附件的电子邮件。我已经关注过这篇文章(以及其他许多文章):Sending email with attachment through GMailSender?

所以我做了同样的事情,我可以发送电子邮件,但只是没有附件。不幸的是,Transport.send似乎失败了。过了一会儿就显示出来了:

D/SntpClient( 61): request time failed: java.net.SocketException: Address family not supported by protocol

我尝试以不同的方式创建File对象(streamUri我认为是正确的):

Uri streamUri = intent.getParcelableExtra(Intent.EXTRA_STREAM); 
File f = new File(streamUri.toString()); //I get an error if I pass only streamUri as parameter

以及

File f = new File(streamUri.getEncodedPath());

但我明白了:

(  418): IOException while sending message
(  418): javax.mail.MessagingException: IOException while sending message;
(  418):   nested exception is:
(  418):    java.io.FileNotFoundException: /media/external/images/media/2 (No such file or directory)

所以我怀疑我可能错误地创建了File对象。

1 个答案:

答案 0 :(得分:1)

路径不正确,这解决了问题:

public String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}