我正在尝试发送包含多个附件的电子邮件。
Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"email1@email.com", "email2@email.com"});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "The Subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "The Text");
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
emailIntent.setType("text/plain");
startActivity( Intent.createChooser(emailIntent, "Send Email Using: ") );
当我使用gmail发送电子邮件时,此功能很有用,但如果我使用Nexus One上的电子邮件客户端发送电子邮件,则不会附加附件。它包含所有文本,主题等...但只是没有附件。我拥有的电子邮件帐户是一个交换帐户,如果这很重要......
答案 0 :(得分:12)
试试这个工作正常。
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
emailIntent.setType("plain/text");
ArrayList<Uri> uris = new ArrayList<Uri>();
String[] filePaths = new String[] {image1 Path,image2 path};
for (String file : filePaths) {
File fileIn = new File(file);
Uri u = Uri.fromFile(fileIn);
uris.add(u);
}
if ( !(app_preferences.getString("email", "") == null || app_preferences.getString("email", "").equals(""))) {
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {app_preferences.getString("email", "")});
}
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject name");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Please find the attachment.");
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(Intent.createChooser(emailIntent, "Email:"));
答案 1 :(得分:0)
尝试了所有这一百万次 - 让它上班,但有一个令人讨厌的警告。发现它是一个Android错误。有一个修复&amp;更多信息:
https://code.google.com/p/android/issues/detail?id=38303
Error: ClassCastException warning in log when opening e-mail app with a body and multiple file attachments.
更新:找到了解决方法。 而不是
sendIntent.putExtra(Intent.EXTRA_TEXT, "See attached CSV files.");
将文本作为ArrayList
ArrayList<String> extra_text = new ArrayList<String>();
extra_text.add("See attached CSV files.");
sendIntent.putStringArrayListExtra(Intent.EXTRA_TEXT, extra_text);
瞧!没有例外,EXTRA_TEXT最终成为电子邮件的正文。
编辑:我认为只是评论出这一行可以摆脱错误 - 但是你不能输入正文的任何信息。在我的情况下,这很好,因为我只是通过电子邮件发送日志文件。删除此行以消除警告:'sendIntent.putExtra(Intent.EXTRA_TEXT,“请参阅附件中的CSV文件。”);'
答案 2 :(得分:0)
如果要发送一些文件应注意! 1.与ACTION_SEND_MULTIPLE而非ACTION_SEND一起使用。 2.使用setType(“ text / plain”)代替setType(“ application / image”) 3.与putParcelableArrayListExtra(Intent.EXTRA_STREAM,imageUris)一起使用,而不是putExtra(Intent.EXTRA_STREAM,imageUris)
Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
emailIntent.setType("text/plain");
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{""});
emailIntent.putExtra(Intent.EXTRA_SUBJECT,"SUBJECT");
emailIntent.putExtra(Intent.EXTRA_TEXT, "BODY");
ArrayList<Uri> imageUris = new ArrayList<>();
imageUris.add(Uri.parse("file://" + invoicePath));
if (signaturePath != null) {
imageUris.add(Uri.parse("file://" + signaturePath));
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
这对我有用。