【问题标题】:Android Intent for sending email with attachment [duplicate]用于发送带有附件的电子邮件的 Android Intent [重复]
【发布时间】:2011-08-30 00:05:13
【问题描述】:

可能重复:
Email from internal storage

收件人正在接收电子邮件,但没有附件。 这是代码,哪位高手知道我哪里出错了?

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"email@example.com"});
intent.putExtra(Intent.EXTRA_SUBJECT, "subject here");
intent.putExtra(Intent.EXTRA_TEXT, "body text");
File root = Environment.getExternalStorageDirectory();
File file = new File(root, xmlFilename);
if (!file.exists() || !file.canRead()) {
    Toast.makeText(this, "Attachment Error", Toast.LENGTH_SHORT).show();
    finish();
    return;
}
Uri uri = Uri.parse("file://" + file);
intent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(intent, "Send email..."));

我没有收到任何 toast 消息。 谢谢。

【问题讨论】:

  • 我认为另一个问题是为什么不能从内部存储发送电子邮件。而在这一个中,当从外部存储发送时它不起作用。虽然相似,但它们并不相同。
  • @Alex Gitelman 实际上故障模式是相同的,并且在那里为他提供了一个适用于内部外部存储的答案。
  • 这一行不创建文件(java中众所周知) File file = new File(root, xmlFilename);您必须使用文件实例创建输出流编写器来创建文件,除非该文件已存在于文件系统中。
  • 我发现这个帖子对我来说非常有用stackoverflow.com/questions/38200282/…

标签: java android android-intent attachment


【解决方案1】:

该文件可能不是世界可读的。

编辑:确实。尝试这样做:

Uri uri = Uri.parse("file://" + file.getAbsolutePath());

【讨论】:

  • 我已经试过了。同样的结果 - 你必须帮助我:(
  • 你希望我们相信这是一个不同的杰克逊先生吗? stackoverflow.com/questions/6072895/email-from-internal-storage/…
  • 没有告诉你要在外部保存,我修复了你从内部存储发送附件的代码,这样它现在可以在 gmail 中使用古怪。与其从一个新程序出现新错误重新开始,不如从您的其他帐户中的其他问题中取出您的旧程序,并将其用于内部或外部存储。
  • 如果所有其他方法都失败了,您始终可以实现自己的 ContentProvider,它刚刚传递了文件数据:我已经成功地使用它来将文件附加到 GMail。
  • 是的,要么确保你在 logcat 中看到的路径是有效的,并且它以 /mnt/sdcard 开头(即使它在其他地方结束,以保持 GMail 快乐)或了解 ContentProviders。今后请坚持一个账号,每个话题一个问题。
猜你喜欢
  • 2012-03-24
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
相关资源
最近更新 更多