Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android send mail with attachment from string

I have a HTML string which I want to attach to mail as a file. I could save this string to a file and attach it but I want to do it without saving it to a file. I think it should be possible but I don't know how to do it. This is my code:

String html = "<html><body><b><bold</b><u>underline</u></body></html>";
Intent intent = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(html));

// this is where I want to create attachment
intent.putExtra(Intent.EXTRA_STREAM, Html.fromHtml(html));

startActivity(Intent.createChooser(intent, "Send Email"));

How can I attach string as a file to mail?

like image 273
Bartek Kosa Avatar asked Oct 01 '22 11:10

Bartek Kosa


1 Answers

This code saves you from adding a manifest uses permission to read from external sd card. It creates a temp in files directory on your app private directory then creates the file with the contents of your string and allows read permission so that it can be accessed.

String phoneDesc = "content string to send as attachment";

FileOutputStream fos = null;
try {
        fos = openFileOutput("tempFile", Context.MODE_WORLD_READABLE);
        fos.write(phoneDesc.getBytes(),0,phoneDesc.getBytes().length);
        fos.flush();
        fos.close();
} catch (IOException ioe) {
    ioe.printStackTrace();
}
finally {
    if (fos != null)try {fos.close();} catch (IOException ie) {ie.printStackTrace();}
}
File tempFBDataFile  = new File(getFilesDir(),"tempFile");
Intent emailClient = new Intent(Intent.ACTION_SENDTO, Uri.parse("[email protected]"));
emailClient.putExtra(Intent.EXTRA_SUBJECT, "Sample Subject";
emailClient.putExtra(Intent.EXTRA_TEXT, "Sample mail body content");
emailClient.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(tempFBDataFile));//attachment
Intent emailChooser = Intent.createChooser(emailClient, "select email client");
startActivity(emailChooser);

This should be called whenever you dont need the file anymore.

File tempData = new File(getFilesDir(),"tempFile");
if (tempData.exists()) {
    tempData.delete();
}
like image 186
gerfmarquez Avatar answered Oct 05 '22 13:10

gerfmarquez