发送带有多个附件的电子邮件

7
我正在尝试发送带有多个附件的电子邮件。
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上的电子邮件客户端发送电子邮件,则不会附加附件。 它具有所有文本,主题等,但没有附件。 如果需要,我的电子邮件帐户是Exchange帐户...

3个回答

13

试一下这个,它能正常工作。

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:"));

7
+2 android.content.Intent.ACTION_SEND_MULTIPLE 这个很好用...谢谢 - βhargavḯ
2
如果你不在Intent.EXTRA_EMAIL中传递一个新的String[] {},那么它只会将收件人字段保留为空... - Charlie A
在这里添加收件人地址。 - user5493659

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..."));

这对我有效。


0
尝试了无数次,终于让它工作了,但出现了一个不好的警告。后来发现这是一个Android的bug。在这里可以找到修复方法和更多信息:
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文件。”);”


如果emailIntent.setType("text/html"),你的解决方案可以用于HTML正文。 - Nizzy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接