发送包含多个附件的电子邮件

时间:2011-03-16 18:15:01

标签: android email android-intent attachment

我正在尝试发送包含多个附件的电子邮件。

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上的电子邮件客户端发送电子邮件,则不会附加附件。它包含所有文本,主题等...但只是没有附件。我拥有的电子邮件帐户是一个交换帐户,如果这很重要......

3 个答案:

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

这对我有用。