【问题标题】:Android send email with multiple attachments issuesAndroid 发送带有多个附件的电子邮件问题
【发布时间】:2019-12-24 03:35:35
【问题描述】:

我能够发送带有单个附件的电子邮件。当我切换到发送带有多个附件的电子邮件时,发送邮件代码不起作用。这是我的代码:

 private void ShareViaEmail(String csvFilePath, String ibiFilePath, String message, String mailTo) {
    try {
        //File Root= Environment.getExternalStorageDirectory();
        //String fileLocation=Root.getAbsolutePath() + folderName + "/" + fileName;
        //Intent intent = new Intent(Intent.ACTION_SENDTO);

        //attach multiple file
        Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);

        intent.setType("text/plain");
        //String message="CSV file is " + csvFilePath + ".";
        intent.putExtra(Intent.EXTRA_SUBJECT, "Report ");
        //intent.putExtra(Intent.EXTRA_STREAM, Uri.parse( "file://"+csvFilePath));
        Log.d(LOG_TAG,"ibiFilePath : "+ibiFilePath );
        //attached multiple file
        //followed by:
        ArrayList<Uri> uris = new ArrayList<Uri>();

        uris.add(Uri.fromFile(new File(csvFilePath)));
        uris.add(Uri.fromFile(new File(ibiFilePath)));

        intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);

        intent.putExtra(Intent.EXTRA_TEXT, message);
        intent.setData(Uri.parse("mailto:" + mailTo));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        startActivity(intent);
    } catch(Exception e)  {

        Log.d(LOG_TAG,"exception raises during sending mail"+e );
    }
}

我收到以下错误消息。 2019-08-18 11:19:56.736 2979-2979/com.xyz.testemail W/Bundle:键 android.intent.extra.TEXT 预期 ArrayList 但值是 java.lang.String。已返回默认值。 2019-08-18 11:19:56.741 2979-2979/com.xyz.testemail W/Bundle:尝试转换生成的内部异常: java.lang.ClassCastException:java.lang.String 无法转换为 java.util.ArrayList 在 android.os.BaseBundle.getCharSequenceArrayList(BaseBundle.java:1265) 在 android.os.Bundle.getCharSequenceArrayList(Bundle.java:1075) 在 android.content.Intent.getCharSequenceArrayListExtra(Intent.java:7919) 在 android.content.Intent.migrateExtraStreamToClipData(Intent.java:10774) 在 android.app.Instrumentation.execStartActivity(Instrumentation.java:1617) 在 android.app.Activity.startActivityForResult(Activity.java:4621) 在 android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:68) 在 android.app.Activity.startActivityForResult(Activity.java:4579) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:751) 在 android.app.Activity.startActivity(Activity.java:4940) 在 android.app.Activity.startActivity(Activity.java:4908) 在 com.xyz.testemail.MainActivity.ShareViaEmail(MainActivity.java:508)

【问题讨论】:

    标签: android email email-attachments send


    【解决方案1】:

    删除:

    intent.putExtra(Intent.EXTRA_TEXT, message);
    

    如果您使用EXTRA_STREAM,则不应同时使用EXTRA_TEXT。而且,对于ACTION_SEND_MULTIPLEEXTRA_TEXT 必须是字符串的List,而不是单个字符串。

    还有:

    • 您的代码将在 Android 7.0+ 上崩溃,因为您使用的是Uri.forFile()。使用FileProvider 将您的内容提供给其他应用程序。

    • 没有电子邮件应用程序必须支持ACTION_SEND_MULTIPLE

    • 其他应用可以支持ACTION_SEND_MULTIPLE,而不仅仅是电子邮件应用

    【讨论】:

    • 如果我删除 intent.putExtra(Intent.EXTRA_TEXT, message);我在哪里可以插入电子邮件正文?
    • @CK8:我没有使用过ACTION_SEND_MULTIPLE,更不用说使用电子邮件客户端了。您需要使用流行的电子邮件客户端(Gmail、K-9 Mail、FastMail、ProtonMail 等)运行一些测试,看看它们做了什么。
    • 我删除了 intent.putExtra(Intent.EXTRA_TEXT, message) 行并更改了以下行,但我仍然收到对 uris.add(Uri.parse("file://"+csvFilePath) 的异常更改); uris.add(Uri.parse("file://"+ibiFilePath));
    • @CK8:如果你删除了intent.putExtra(Intent.EXTRA_TEXT, message),你会得到一个不同的异常。检查更新的堆栈跟踪。
    • 我收到此异常 - 现在在发送 mailandroid.os.FileUriExposedException: file:///storage/emulated/0/testfile.csv 期间引发。
    猜你喜欢
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2012-03-24
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多