Json file not being attached to email for android

Viewed 355

I am trying to send an attached json file to an email, however for some reason the json file is not being attached when the email is sent/created. Note: I do NOT want the user to select the file to attach, I want it to be fixed/set automatically.

I have the following permissions in my AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

and the code

   private void backupJsonToEmail(String jsonString) {
    // create file

    if(!getFilesDir().exists()){
        getFilesDir().mkdir();
    }
    String filePath = getFilesDir() + File.separator + BACKUP_NAME;
    System.out.println("file path: " + filePath);
    // /data/user/0/com.my.stuff/files/backup.json

    try {
        FileOutputStream fos = new FileOutputStream(filePath);
        DataOutputStream outStream = new DataOutputStream(new BufferedOutputStream(fos));
        outStream.writeBytes(jsonString);
        outStream.close();

        // send to email
        try {
            File file = new File(filePath);
            long fileKbSize = file.length() / 1024;
            System.out.println("FILE SIZE IS: " + fileKbSize + " kb"); // 69 kb...

            Uri uri = Uri.fromFile(file);
            String to[] = {"test@yahoo.com"};

            Intent originalIntent = ShareCompat.IntentBuilder.from(this)
                    .setType("application/json")
                    .setEmailTo(to)
                    .setStream(uri)
                    .setSubject("test")
                    .setText("here is the attached json")
                    .getIntent();
            originalIntent.setData(Uri.parse("mailto:"));
            originalIntent.setAction(Intent.ACTION_SENDTO);

            Intent finalIntent = Intent.createChooser(originalIntent, "choose an email application");
            startActivity(finalIntent);

        } catch (Throwable t) {
            Toast.makeText(this, "Request failed try again: " + t.toString(), Toast.LENGTH_LONG).show();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

}

EDIT1: after making the suggestion changes that @piyushpk suggested, I now get the following errors when I choose an email app:

for Yahoo Mail: "The attachment is too big to send"
for Gmail: "Permission denied for the attachment"

enter image description here

however the file size is only 69 kb, according to my print statement...

1 Answers

I think you are trying to use Inbuilt email application to send a json file and yahoo is complaining about size and Gmail is denying it as json is considered not a safe extension.

Instead use Some SMTP Email api like send grid etc. to send file without any inbuilt android application. https://github.com/sendgrid/sendgrid-java

Mail Gun Sendgrid are quite good option

Related