Java 使用Gmail Sender从android应用程序发送带有附件的电子邮件在Transport.Send失败

Java 使用Gmail Sender从android应用程序发送带有附件的电子邮件在Transport.Send失败,java,android,gmail,email-attachments,jakarta-mail,Java,Android,Gmail,Email Attachments,Jakarta Mail,我正在尝试从我的android应用程序发送一封带有图片作为附件的电子邮件。我关注过这篇文章(以及许多其他文章): 所以我也做了同样的事情,我可以发送电子邮件,但不需要附件。不幸的是,Transport.send似乎失败了。一段时间后,它显示: D/SntpClient( 61): request time failed: java.net.SocketException: Address family not supported by protocol 我尝试以不同的方式创建文件对象(stre

我正在尝试从我的android应用程序发送一封带有图片作为附件的电子邮件。我关注过这篇文章(以及许多其他文章):

所以我也做了同样的事情,我可以发送电子邮件,但不需要附件。不幸的是,Transport.send似乎失败了。一段时间后,它显示:

D/SntpClient( 61): request time failed: java.net.SocketException: Address family not supported by protocol
我尝试以不同的方式创建文件对象(
streamUri
我认为是正确的):

而且

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)

因此,我怀疑我可能创建的文件对象不正确。

路径不正确,这修复了问题:

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);
}
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);
}