简体   繁体   English

无法以编程方式在Android中发送带有多个附件的电子邮件

[英]Cant send email with multiple attachment in android programmatically

I cant send email in android with multiple attachment using Intent chooser. 我无法使用Intent选择器在具有多个附件的android中发送电子邮件。 After choosing gmail from chooser .It throws Unfortunately gmail has stopped error. 从选择器中选择gmail后,它会抛出不幸的是gmail已停止错误。 I don't what mistake i have done. 我没有犯什么错误。 Can any one help me? 谁能帮我?

 final Intent ei = new Intent(Intent.ACTION_SEND_MULTIPLE);
                                        ei.setType("plain/text");
                                        ei.putExtra(Intent.EXTRA_EMAIL, new String[] {"ademo@gmail.com"});
                                        ei.putExtra(Intent.EXTRA_SUBJECT, "SFC App Equiry");
                                        ei.putExtra(android.content.Intent.EXTRA_TEXT,Html.fromHtml("<b>"+"Packing Date"+"</b>&nbsp;"+pdate+"<br><b>"+"Shifting Date"+"</b>&nbsp;"+sdate+"<br><b>"+"Delivery Date"+"</b>&nbsp;"+ddate+"<br><b>"+"Source city"+"</b>&nbsp;"+scity+"<br><b>"+"Destination City"+"</b>&nbsp;"+dcity+"<br><b>"+"Source Property Type"+"</b>&nbsp;"+stprop+"<br><b>"+"Destination Property Type"+"</b>&nbsp;"+dtprop));

                                    ArrayList<Uri> uris = new ArrayList<Uri>();

                                    //uris.parse("file://sdcard/Images/20140812_130215.jpg");
                                    //uris.add("file://sdcard/Images/20140812_130227.jpg");

                                    File fileIn = new File(ppath);
                                    File fileIn1 = new File(ppath1);
                                    File fileIn2 = new File(ppath2);
                                    File fileIn3 = new File(ppath3);
                                    File fileIn4 = new File(ppath4);
                                    File fileIn5 = new File(ppath5);
                                    File fileIn6 = new File(ppath6);

                                    Uri u = Uri.fromFile(fileIn);
                                    Uri u1 = Uri.fromFile(fileIn1);
                                    Uri u2 = Uri.fromFile(fileIn2);
                                    Uri u3 = Uri.fromFile(fileIn3);
                                    Uri u4 = Uri.fromFile(fileIn4);
                                    Uri u5 = Uri.fromFile(fileIn5);
                                    Uri u6 = Uri.fromFile(fileIn6);

                                    uris.add(u);
                                    uris.add(u1);
                                    uris.add(u2);
                                    uris.add(u3);
                                    uris.add(u4);
                                    uris.add(u5);
                                    uris.add(u6);



                                    ei.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
                                    startActivityForResult(Intent.createChooser(ei, "Sending multiple attachment"), 12345);

My stacktrace is: 我的堆栈跟踪是:

11-26 10:58:41.791: W/Bundle(19728): Key android.intent.extra.TEXT expected ArrayList<CharSequence> but value was a java.lang.String.  The default value <null> was returned.
11-26 10:58:41.801: W/Bundle(19728): Attempt to cast generated internal exception:
11-26 10:58:41.801: W/Bundle(19728): java.lang.ClassCastException: java.lang.String cannot be cast to java.util.ArrayList
11-26 10:58:41.801: W/Bundle(19728):    at android.os.Bundle.getCharSequenceArrayList(Bundle.java:1367)
11-26 10:58:41.801: W/Bundle(19728):    at android.content.Intent.getCharSequenceArrayListExtra(Intent.java:5265)
11-26 10:58:41.801: W/Bundle(19728):    at android.content.Intent.migrateExtraStreamToClipData(Intent.java:7843)
11-26 10:58:41.801: W/Bundle(19728):    at android.content.Intent.migrateExtraStreamToClipData(Intent.java:7810)
11-26 10:58:41.801: W/Bundle(19728):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1423)
11-26 10:58:41.801: W/Bundle(19728):    at android.app.Activity.startActivityForResult(Activity.java:3547)
11-26 10:58:41.801: W/Bundle(19728):    at android.app.Activity.startActivityForResult(Activity.java:3508)
11-26 10:58:41.801: W/Bundle(19728):    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:840)
11-26 10:58:41.801: W/Bundle(19728):    at com.ipot.setringtone.MainActivity.onCreate(MainActivity.java:131)
11-26 10:58:41.801: W/Bundle(19728):    at android.app.Activity.performCreate(Activity.java:5484)
11-26 10:58:41.801: W/Bundle(19728):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
11-26 10:58:41.801: W/Bundle(19728):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2400)
11-26 10:58:41.801: W/Bundle(19728):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2498)
11-26 10:58:41.801: W/Bundle(19728):    at android.app.ActivityThread.access$900(ActivityThread.java:179)
11-26 10:58:41.801: W/Bundle(19728):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324)
11-26 10:58:41.801: W/Bundle(19728):    at android.os.Handler.dispatchMessage(Handler.java:102)
11-26 10:58:41.801: W/Bundle(19728):    at android.os.Looper.loop(Looper.java:146)
11-26 10:58:41.801: W/Bundle(19728):    at android.app.ActivityThread.main(ActivityThread.java:5641)
11-26 10:58:41.801: W/Bundle(19728):    at java.lang.reflect.Method.invokeNative(Native Method)
11-26 10:58:41.801: W/Bundle(19728):    at java.lang.reflect.Method.invoke(Method.java:515)
11-26 10:58:41.801: W/Bundle(19728):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1288)
11-26 10:58:41.801: W/Bundle(19728):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1104)
11-26 10:58:41.801: W/Bundle(19728):    at dalvik.system.NativeStart.main(Native Method)
11-26 10:58:42.431: W/ResolverActivity(19728): mLaunchedFromPackage=com.ipot.setringtone
11-26 10:58:42.781: I/DVFSHelper(19728): DVFSHelper:: failed to load CFMS
11-26 10:58:42.781: I/DVFSHelper(19728): DVFSHelper:: failed to load CFMS
11-26 10:58:42.781: I/DVFSHelper(19728): DVFSHelper:: failed to load CFMS
11-26 10:58:42.781: I/DVFSHelper(19728): DVFSHelper:: failed to load CFMS
11-26 10:58:42.901: I/Choreographer(19728): Skipped 38 frames!  The application may be doing too much work on its main thread.
11-26 10:58:43.001: D/OpenGLRenderer(19728): Enabling debug mode 0
11-26 10:58:47.641: D/AbsListView(19728): onDetachedFromWindow

You can send multiple attachments over mail using the following code: 您可以使用以下代码通过邮件发送多个附件:

public boolean sendEmailWithMultipleAttachments(Context context,
                                                        String[] emailTo, String[] emailCC, String[] emailBCC,
                                                        String subject, String emailBody, List filePaths) throws ActivityNotFoundException {

            final Intent emailIntent =
                    new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
            emailIntent.setType("message/rfc822");
            emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, emailTo);
            emailIntent.putExtra(android.content.Intent.EXTRA_CC, emailCC);
            emailIntent.putExtra(android.content.Intent.EXTRA_BCC, emailBCC);
            emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
            ArrayList<String> extra_text = new ArrayList<String>(); 
            extra_text.add("Your text here"); 
            ei.putStringArrayListExtra(Intent.EXTRA_TEXT, extra_text);

            if (filePaths != null) {
                // has to be an ArrayList
                ArrayList uris = new ArrayList();
                // convert from paths to Android friendly Parcelable Uri's
                for (String file : filePaths) {
                    File fileIn = new File(file);
                    if (fileIn.exists()) {
                        Uri u = Uri.fromFile(fileIn);
                        uris.add(u);
                    }
                }
                emailIntent.putParcelableArrayListExtra
                        (Intent.EXTRA_STREAM, uris);
            }
            context.startActivity(Intent.createChooser(emailIntent, "Sent mail"));
            return true;
        }

I didn't change any code. 我没有更改任何代码。 But after running it today, its working perfectly. 但是今天运行之后,它运行完美。 Don't know which one wrong or right. 不知道哪一个是对的。 Anyway, now its working fine for me, the same code which i posted. 无论如何,现在它对我来说很好,我发布的代码相同。 Thank You Alok Nair for such a help. 谢谢Alok Nair的帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM