69 Stimmen

Ich versuche, eine Datei von der SD-Karte an eine E-Mail anzuhängen

Ich versuche, eine Absicht zu starten, um eine E-Mail zu senden. All das funktioniert, aber wenn ich versuche, die E-Mail tatsächlich zu senden, passieren ein paar "seltsame" Dinge.

Hier ist der Code

Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("image/jpeg");
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Photo");
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://sdcard/dcim/Camera/filename.jpg"));
sendIntent.putExtra(Intent.EXTRA_TEXT, "Enjoy the photo");
startActivity(Intent.createChooser(sendIntent, "Email:"));

Wenn ich also das Google Mail-Menü im Kontext aufrufe, wird der Anhang angezeigt, ich kann eingeben, an wen die E-Mail gerichtet ist, und den Text und den Betreff bearbeiten. Keine große Sache. Ich drücke auf Senden, und die E-Mail wird gesendet. Das Problem ist nur, dass der Anhang NICHT gesendet wird.

Also dachte ich mir, warum nicht mit dem Kontext des E-Mail-Menüs versuchen (für mein Backup-E-Mail-Konto auf meinem Telefon). Es wird der Anhang angezeigt, aber kein Text im Textkörper oder im Betreff. Wenn ich sie versende, wird der Anhang korrekt gesendet. Das lässt mich vermuten, dass hier etwas nicht stimmt. Benötige ich eine neue Berechtigung im Manifest, um eine E-Mail mit Anhang zu versenden? Was mache ich falsch?

3voto

Railsdev Punkte 31

Ich hatte das gleiche Problem und habe überall nach einer Lösung gesucht. Schließlich löste ich das Problem, indem ich eine Open-Source-Anwendung fand, die sofort funktionierte, und sah mir an, wie sie es machte. Der Code ist ziemlich lang, also werde ich ihn hier nicht zitieren, sondern einen Link posten. Schauen Sie sich die sendEmail-Funktion in Zeile 449 an

http://rehearsalassist.svn.sourceforge.net/viewvc/rehearsalassist/Android/trunk/src/urbanstew/RehearsalAssistant/SessionPlayback.java?revision=94&view=markup

Ich habe meinen Code so umgestaltet, dass er ähnlich ist, und jetzt funktioniert er. Ich hoffe, dass dies anderen in der gleichen Situation helfen wird.

3voto

android.weasel Punkte 3095

から RFC 1738 Abschnitt 3.10:

Eine Datei-URL hat die Form:

   file://<host>/<path>

donde Gastgeber ist der vollständig qualifizierte Domänenname des Systems auf auf dem der Pfad zugänglich ist, und Pfad ist eine hierarchische Verzeichnispfad in der Form Verzeichnis/Verzeichnis/.../Name .

Es ist also file:///path/from/Root genau wie http://host/path/from/Root weil zwischen dem zweiten und dritten Schrägstrich ein implizites "localhost" steht. Aber wie oben erwähnt, verwenden Sie Uri.FromFile(), um es zu erstellen.

0voto

CasualCoder Punkte 21

Ich hatte die gleichen Symptome. In meinem Fall lag es daran, dass ich den Anhang zunächst mit den Berechtigungen MODE_PRIVATE . Sobald ich es in MODE_WORLD_READABLE GMail konnte dann offenbar auf die Datei zugreifen und den Anhang ordnungsgemäß versenden.

Mehr sehen

0voto

lucasddaniel Punkte 1569

Für mich funktioniert das perfekt: Bei dieser Lösung erstellt der Nicolas eine Kopie im Cache-Ordner und hier hat gmail intent Zugriff! http://stephendnicholas.com/archives/974

0voto

Jotiram Chavan Punkte 375
public void sendMail(String path) {
        Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
        new String[] {AppConstant.server_mail});
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
        "IBPS ERROR Mail");
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,
        "This is an autogenerated mail from IBPS app");
        emailIntent.setType("image/png");
        Uri myUri = Uri.parse("file://" + path);
        emailIntent.putExtra(Intent.EXTRA_STREAM, myUri);
        startActivity(Intent.createChooser(emailIntent, "Send mail..."));
        }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X