2010-11-10 34 views
1

Je crée une application qui a une fonctionnalité "d'exportation" qui convertit les données de l'utilisateur en fichier CSV et permet à l'utilisateur de l'envoyer en pièce jointe à quelqu'un (vraisemblablement).Envoyer un e-mail avec une pièce jointe depuis une application

Le fichier CSV a été créé avec succès, mais lorsque j'essaie d'envoyer l'e-mail, je rencontre un problème. L'appareil a l'air d'envoyer l'e-mail avec la pièce jointe appropriée, mais lorsque l'e-mail est reçu ... il n'y a aucune pièce jointe ...

Voici le code que j'utilise pour envoyer l'e-mail:

final Intent email = new Intent(android.content.Intent.ACTION_SEND); 

    email.setType("text/html"); 
    email.putExtra(android.content.Intent.EXTRA_SUBJECT, getString(R.string.email_subject)); 
    email.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml(getString(R.string.email_1))); 

    email.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///" + getString(R.string.csv_title))); 


    startActivity(Intent.createChooser(email, "Send mail...")); 
+0

double possible de [problème pour envoyer un e-mail avec une pièce jointe par programme] (http://stackoverflow.com/questions/1247983/problem-sending-an-email-with-an-attachment-programmatically) Comment –

+0

avez-vous créé le fichier CSV? – rasen58

Répondre

0

besoin le bon chemin pour votre fichier, si sur la carte SD puis ...

sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse 
("file://"+Environment.getExternalStorageDirectory()+getString(R.string.csv_title)")); 

Regardez ici pour des informations de plus sur la configuration du chemin de fichier approprié

http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

+0

Et si ce n'est pas sur la carte SD? Je pense qu'il est imprudent de supposer que l'utilisateur a une carte SD ... parce que si ce n'est pas le cas, la fonction d'exportation serait essentiellement inutile pour eux. – dfetter88

+0

définir le chemin d'accès approprié pour où vous enregistrez le fichier ... Le point que je faisais est que "file: //" est incorrect, vous devez spécifier le chemin correct pour obtenir le code pour fonctionner –

0

GMail application accepte le fichier: // Uris seulement s'ils sont sur la carte SD ... et sur un appareil Android 1.6 j'ai même eu un problème avec lui acceptant seulement le fichier: // sdcard/* Uris alors que le réel le stockage externe de ce périphérique spécifique est sur un autre chemin.

De toute façon, j'ai un meilleur comportement avec les pièces jointes depuis que je les fournis à travers un fournisseur de contenu.

+0

Êtes-vous en train de dire cela par en utilisant un ContentProvider, je peux éviter d'utiliser la carte SD pour stocker mon fichier CSV? – dfetter88

+0

Oui, votre implémentation ContentProvider fournira un OutputStream à partir d'un fichier qui peut se trouver dans les répertoires privés de votre application. –

2
i've done for send any file from SD card with mail attachment.. 

Intent sendEmail= new Intent(Intent.ACTION_SEND); 
     sendEmail.setType("rar/image"); 
     sendEmail.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new   
     File("/mnt/sdcard/download/abc.rar"))); 
     startActivity(Intent.createChooser(sendEmail, "Email:"));