Java:发送带有附件的电子邮件:无法发送附件
我正在创建一个应用程序,但我遇到了一个问题。在我将一些数据插入名为“message.txt”的文件后,我无法通过电子邮件发送此文件,因为我的智能手机显示“无法发送附件”。我如何解决这个问题 代码如下:Java:发送带有附件的电子邮件:无法发送附件,java,android,email,Java,Android,Email,我正在创建一个应用程序,但我遇到了一个问题。在我将一些数据插入名为“message.txt”的文件后,我无法通过电子邮件发送此文件,因为我的智能手机显示“无法发送附件”。我如何解决这个问题 代码如下: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String address = ... byte[] messagetosend =
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String address = ...
byte[] messagetosend = ...
String filename = "message.txt";
File file = new File(getExternalFilesDir(null), filename);
FileOutputStream outputstream;
try {
outputstream = openFileOutput(filename,MODE_WORLD_READABLE);
outputstream.write(messagetosend);
outputstream.flush();
outputstream.getFD().sync();
outputstream.close();
} catch (Exception e1) {
e1.printStackTrace();
}
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{address});
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
sendIntent.setType("*/*");
startActivity(Intent.createChooser(sendIntent,"Send with..."));
}
第三方应用程序无权访问该文件。使用
FileProvider
提供服务,或者将文件复制到而不是。如果您已将文件保存为应用程序的专用文件,
应用程序可以看到是否正常,但外部电子邮件客户端将无法看到它。
您需要将其写入外部存储器,或将其公开。您将了解访问级别
或者尝试用JavaMail发送电子邮件,是文件名,路径是正确的。你有权限读取文件吗?我怎么能有权限读取文件?尝试会有帮助吗?从来没有这样做过。@xyz:那篇博文与应用程序开发无关。我已经尝试将文件写入外部存储和Gmail(例如)识别附件,但当我单击按钮发送电子邮件时,通知栏上会显示一条通知,上面写着“无法发送附件”。你知道为什么吗?@PaoloGuizzardi:因为我看不到你的代码,所以我真的不知道。如果没有其他问题,请在
FileOutputStream
上调用flush()
,然后调用getFD().sync()
,然后调用close()
,而不仅仅是close()
,以确保在尝试调用其他应用程序处理该文件之前,所有字节都已写入磁盘,我已经添加了您告诉我的这些调用,并将“getFilesDir”修改为“getExternalFilesDir”。现在Gmail读取了文件,但告诉我“无法发送附件”。我真的不知道为什么。我试着将文件写入外部存储器,Gmail(例如)识别出附件,但当我点击按钮发送电子邮件时,通知栏上会显示一条通知,上面写着“无法发送附件”。你知道为什么吗?你真的需要用意图来做这类工作吗?如果你只想通过Gmail发送附件,那么使用java lib发送电子邮件。我想通过Gmail或任何其他邮件发送应用发送附件。我只知道这个方法。你能把java库链接给我吗?如果你的问题解决了。如果您需要更多帮助,请接受回答或告诉我。对不起,我需要使用意图。我已经用最后一个代码更新了代码。你能看看是否还有其他问题吗?