Tratando de adjuntar un archivo de la tarjeta SD al correo electrónico
Estoy intentando lanzar un intento de enviar un correo electrónico. Todo eso funciona, pero cuando intento enviar al correo electrónico un par de cosas "extrañas" suceden.
Aquí está el código
- Android: Registro del filtro de intenciones para abrir adjuntos de correo electrónico con mi aplicación
- Teclado amigable de correo electrónico de Android en el campo de entrada de webview
- MAILTO Enlace en el correo electrónico para iniciar un nuevo correo electrónico
- ¿Cómo puedo configurar el color para el evento ics?
- Cómo crear un botón de correo electrónico en Android?
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:"));
Así que si me lanzar con el contexto del menú de Gmail Muestra el archivo adjunto, me permite escribir a quién el correo electrónico es, y editar el cuerpo y el tema. No es gran cosa. Me golpeó enviar, y se envía. Lo único es que el archivo adjunto NO se envía.
Asi que. Me imaginé, ¿por qué no intentarlo con el contexto de menú de correo electrónico (para mi cuenta de correo electrónico de copia de seguridad en mi teléfono). Muestra el apego, pero ningún texto en absoluto en el cuerpo o el sujeto. Cuando lo envío, el archivo adjunto se envía correctamente. Eso me llevaría a creer que algo está muy mal. ¿Necesito un nuevo permiso en el Manifiesto para lanzar una intención de enviar correo electrónico con adjunto? ¿Qué estoy haciendo mal?
- ¿Cómo puedo configurar gmail en el emulador de Android?
- Uso de AsyncTask para enviar correo electrónico de Android
- ¿Cómo hacer que mi aplicación de Android aparezca en el selector de aplicaciones cuando envíe un mensaje de correo electrónico a un chat de WhatsApp?
- Inicio de la aplicación de Android desde enlace o correo electrónico
- Cómo enviar una URL en un correo electrónico mediante Android Intents
- Gmail 5.0+: cómo obtener información de la etiqueta para la función de Exchange de Gmail
- La aplicación de Android Gmail no procesa la imagen de fondo en el correo electrónico HTML
- Adjuntar archivo del almacenamiento interno al correo electrónico
También tiene el mismo problema
Código:
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent.setType("image/jpeg"); emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Test Subject"); emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "go on read the emails"); Log.v(getClass().getSimpleName(), "sPhotoUri=" + Uri.parse("file:/"+ sPhotoFileName)); emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:/"+ sPhotoFileName)); startActivity(Intent.createChooser(emailIntent, "Send mail..."));
De adb logcat:
V/DumbDumpersMain( 3972): sPhotoUri=file://sdcard/DumbDumpers/DumbDumper.jpg I/ActivityManager( 56): Starting activity: Intent { action=android.intent.action.CHOOSER comp={android/com.android.internal.app.ChooserActivity} (has extras) } I/ActivityManager( 56): Starting activity: Intent { action=android.intent.action.SEND type=jpeg/image flags=0x3000000 comp={com.google.android.gm/com.google.android.gm.ComposeActivityGmail} (has extras) } I/ActivityManager( 56): Starting activity: Intent { action=android.intent.action.SEND type=jpeg/image flags=0x2800000 comp={com.google.android.gm/com.google.android.gm.ComposeActivity} (has extras) } D/gmail-ls( 120): MailProvider.query: content://gmail-ls/labels/[email protected](null, null) D/Gmail ( 2507): URI FOUND:file://sdcard/DumbDumpers/DumbDumper.jpg
Parece que el proveedor de correo electrónico está adjuntando un archivo de longitud 0. Cuando compruebo el sistema de archivos el archivo está allí y correcto. El código que crea el archivo de imagen está bien terminado antes de intentar enviarlo por correo electrónico.
Alguien arregló esto sin reinicios mágicos (ya lo he intentado)?
Saludos,
Aleta
Actualizar
El camino para mí debería haber sido
file:///sdcard/DumbDumpers/DumbDumper.jpg
Usted necesita el extra /
como esto señala al directorio de la raíz, es decir:
file://
+ /sdcard/DumbDumpers/DumbDumper.jpg
Combinado como
file:///sdcard/DumbDumpers/DumbDumper.jpg
En el fragmento anterior necesita:
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+ sPhotoFileName));
Espero que esto ayude. Me tomó años depurar.
Saludos,
Finlay
Sólo una pequeña observación de mi lado. He estado teniendo los mismos problemas con GMail, pero de alguna manera parece funcionar cuando almaceno el archivo en cuestión en la tarjeta SD primero y recuperar de allí, en lugar de los activos. Así que mi código es el siguiente:
Intent i = new Intent(Intent.ACTION_SEND); i.putExtra(Intent.EXTRA_SUBJECT, "Title"); i.putExtra(Intent.EXTRA_TEXT, "Content"); i.putExtra(Intent.EXTRA_STREAM, uri); i.setType("text/plain"); startActivity(Intent.createChooser(i, "Send mail"));
y aquí,
uri = Uri.fromFile(new File(context.getFilesDir(), FILENAME));
No funciona, mientras que
uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), FILENAME));
hace.
Saludos, Michael
En lugar de "Uri.parse" utilice "Uri.fromFile (nuevo archivo (Environment.getExternalStorageDirectory ()," nombre de archivo "))"
Environment.getExternalStorageDirectory () – ruta a SDcard o cualquier otro almacenamiento externo
Parece que esto es realmente correcto, no estoy seguro de lo que estaba sucediendo, pero después de un reinicio que comenzó a trabajar: /
Intent i = new Intent(Intent.ACTION_SEND); i.setType("message/rfc822"); i.putExtra(Intent.EXTRA_EMAIL , new String[]{"[email protected]"}); i.putExtra(Intent.EXTRA_SUBJECT, "Data from app"); i.putExtra(Intent.EXTRA_TEXT , "experience number x"); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "filename.txt")); i.putExtra(Intent.EXTRA_STREAM, uri); startActivity(Intent.createChooser(i, "Send email..."));
Tengo el mismo problema y busqué por todas partes una solución. Finalmente lo resolví encontrando una aplicación de código abierto que funcionó fuera de la caja y miró cómo lo hicieron. El código es bastante largo, así que no lo citaré aquí, sino postear un enlace. Mira la función sendEmail en la línea 449
Refactoreé mi código para ser similar, y ahora funciona. Espero que esto ayude a otros en la misma situación.
Del RFC 1738 sección 3.10:
Una URL de archivo toma la forma:
file://<host>/<path>
Donde host es el nombre de dominio completo del sistema en el que se puede acceder a la ruta de acceso y path es una ruta de directorio jerárquica del directorio / directory /…/ nombre del formulario.
Así que es file: /// path / from / root como http: // host / path / from / root porque hay un 'localhost' implícito entre la segunda y tercera barra. Pero como se mencionó anteriormente, use Uri.FromFile () para construirlo.
Tuve los mismos síntomas. En mi caso fue porque inicialmente estaba guardando el archivo adjunto con los permisos MODE_PRIVATE
. Tan pronto como lo cambié a MODE_WORLD_READABLE
parece que GMail fue capaz de acceder al archivo y enviar el archivo adjunto correctamente.
Ver más
Es un trabajo perfecto para mí: En esta solución el Nicolas crear una copia dentro de la carpeta de caché y aquí Gmail intención tiene acceso! http://stephendnicholas.com/archives/974
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...")); }
También intenta agregar Intent.addFlags (Intent.FLAG_GRANT_READ_URI_PERMISSION); Esto ayudó con mi problema.
Tengo la solución en esto después de 4 días, observa por favor los puntos siguientes mientras que da la trayectoria a la clase del archivo en androide (Java):
1) Utilice la ruta de acceso para el almacenamiento interno String path = "/ storage / sdcard0 / myfile.txt";
2) path = "/ storage / sdcard1 / myfile.txt";
3) mencionar permisos en el archivo Manifest.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
4) Primero compruebe la longitud del archivo para confirmarlo.
5) Compruebe las trayectorias en ES File Explorer con respecto a sdcard0 & sdcard1 es esto mismo o bien ……
p.ej
File file=new File(path); long=file.length();//in Bytes
Enviar un correo electrónico con un archivo adjunto: (Por doc.)
Intención emailIntent = new Intent (Intent.ACTION_SEND); EmailIntent.setType (HTTP.PLAIN_TEXT_TYPE);
EmailIntent.putExtra (Intent.EXTRA_EMAIL, nueva cadena [] {"[email protected]"});
EmailIntent.putExtra (Intent.EXTRA_SUBJECT, "Asunto de correo electrónico"); EmailIntent.putExtra (Intent.EXTRA_TEXT, "Texto del mensaje de correo electrónico"); EmailIntent.putExtra (Intent.EXTRA_STREAM, Uri.parse ("content: // path / to / email / attachment"));
// También puede adjuntar varios elementos pasando un ArrayList de Uris
- Android Eclipse Plugin: Prueba de Instrumentación Runner no especificado
- "Falta el componente de herramientas de plataforma de SDK!"