Divya
Divya

Reputation: 182

Cant send email with multiple attachment in android programmatically

I cant send email in android with multiple attachment using Intent chooser. After choosing gmail from chooser .It throws Unfortunately gmail has stopped error. 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[] {"[email protected]"});
                                        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

Upvotes: 1

Views: 2957

Answers (2)

Divya
Divya

Reputation: 182

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.

Upvotes: 1

Alok Nair
Alok Nair

Reputation: 4004

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;
        }

Upvotes: 5

Related Questions