android exportar a csv y enviar como archivo adjunto de correo electrónico

He visto varios hilos en este sitio sobre cómo enviar correos electrónicos con archivos adjuntos en Android. Probé todos los métodos discutidos aquí , aquí y aquí .

Estoy creando un archivo csv a través de código y guardo este archivo en el almacenamiento interno de Android. Entonces quiero enviar este archivo como archivo adjunto en un correo electrónico. Bueno, el correo electrónico está siendo enviado, lo obtengo sin archivo adjunto. Esto es lo que hice.

String columnString = "\"Person\",\"Gender\",\"Street1\",\"PostOfice\",\"Age\""; String dataString = "\"" + currentUser.userName +"\",\"" + currentUser.gender + "\",\"" + currentUser.street1 + "\",\"" + currentUser.poNumber.toString() + "\",\"" + currentUser.age.toString() + "\""; String combinedString = columnString + "\n" + dataString; File file = new File(this.getCacheDir()+ File.separator + "Data.csv"); try { FileOutputStream out = new FileOutputStream(file); out.write(combinedString.getBytes()); out.close(); } catch (IOException e) { Log.e("BROKEN", "Could not write file " + e.getMessage()); } Uri u1 = Uri.fromFile(file); Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Person Details"); sendIntent.putExtra(Intent.EXTRA_STREAM, u1); sendIntent.setType("text/richtext"); startActivity(sendIntent); 

Traté de cambiar las configuraciones de mime a “text / html” y “text / richtext” etc. Pero aún no tuve suerte. ¿Alguien puede decirme qué estoy haciendo mal?

Gracias a todos los que trataron de ayudar … Después de tomar un día completo, he enviado un correo electrónico desde mi aplicación con un archivo adjunto … Este es el código de trabajo …

 String columnString = "\"PersonName\",\"Gender\",\"Street1\",\"postOffice\",\"Age\""; String dataString = "\"" + currentUser.userName +"\",\"" + currentUser.gender + "\",\"" + currentUser.street1 + "\",\"" + currentUser.postOFfice.toString()+ "\",\"" + currentUser.age.toString() + "\""; String combinedString = columnString + "\n" + dataString; File file = null; File root = Environment.getExternalStorageDirectory(); if (root.canWrite()){ File dir = new File (root.getAbsolutePath() + "/PersonData"); dir.mkdirs(); file = new File(dir, "Data.csv"); FileOutputStream out = null; try { out = new FileOutputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } try { out.write(combinedString.getBytes()); } catch (IOException e) { e.printStackTrace(); } try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } Uri u1 = null; u1 = Uri.fromFile(file); Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Person Details"); sendIntent.putExtra(Intent.EXTRA_STREAM, u1); sendIntent.setType("text/html"); startActivity(sendIntent); 

Además, si ha montado la tarjeta SD de su teléfono en la máquina, este código no funcionará. Solo uno puede acceder a SDCard a la vez. Entonces, en ese caso, desmonte su tarjeta SD de la computadora e intente … Gracias al tipo que respondió aquí … También asegúrese de haber comprado permiso para escribir en el almacenamiento externo en su archivo de manifiesto …

  

Espero que ayude a alguien … Gracias a todos los que intentaron ayudar …

Tratar

 sendIntent.setType("message/rfc822"); 

Este Código te ayudará

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); buttonSend = (Button) findViewById(R.id.buttonSend); textTo = (EditText) findViewById(R.id.editTextTo); textSubject = (EditText) findViewById(R.id.editTextSubject); textMessage = (EditText) findViewById(R.id.editTextMessage); buttonSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String to = textTo.getText().toString(); String subject = textSubject.getText().toString(); String message = textMessage.getText().toString(); Intent i = new Intent(Intent.ACTION_SEND); i.setType("plain/text"); File data = null; try { Date dateVal = new Date(); String filename = dateVal.toString(); data = File.createTempFile("Report", ".csv"); FileWriter out = (FileWriter) GenerateCsv.generateCsvFile( data, "Name,Data1"); i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(data)); i.putExtra(Intent.EXTRA_EMAIL, new String[] { to }); i.putExtra(Intent.EXTRA_SUBJECT, subject); i.putExtra(Intent.EXTRA_TEXT, message); startActivity(Intent.createChooser(i, "E-mail")); } catch (IOException e) { e.printStackTrace(); } } }); } public class GenerateCsv { public static FileWriter generateCsvFile(File sFileName,String fileContent) { FileWriter writer = null; try { writer = new FileWriter(sFileName); writer.append(fileContent); writer.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { writer.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return writer; } } 

Agregue esta línea en el archivo AndroidManifest.xml :

   

Para archivos de almacenamiento interno, debe hacer que el archivo sea legible:

shareFile.setReadable (true, false);

Aquí está el código para adjuntar el archivo csv en el correo (Su código de trabajo): MyCsvFile.csv “debe estar presente en su memoria interna / externa del teléfono.

Para más información sobre esto: https://stackoverflow.com/a/48643905/8448886

A continuación se muestra el código para adjuntar el archivo csv en el correo:

 String csv = (Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyCsvFile.csv"); // Here csv file name is MyCsvFile.csv button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent emailIntent = new Intent(Intent.ACTION_SEND); emailIntent.setType("text/plain"); emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"email@example.com"}); emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject here"); emailIntent.putExtra(Intent.EXTRA_TEXT, "body text"); File file = new File(csv); Uri uri = Uri.fromFile(file); emailIntent.putExtra(Intent.EXTRA_STREAM, uri); startActivity(Intent.createChooser(emailIntent, "Pick an Email provider")); } }); 
    Intereting Posts