PDA

Ver la Versión Completa : [ TUTORIAL ] Enviar correos electrónicos (emails) desde Tasker


Caravantes
23/07/16, 13:00:35
Enviar correos electrónicos desde Tasker me parece un asunto suficientemente relevante como para dedicarle un hilo específico en este foro, y creo que todavía no lo había. Además de mi aportación inicial, este hilo puede dar cabida a otras consultas y/o sugerencias para enviar emails desde Tasker.

He tenido que enfrentarme a este problema y he estado investigando un poco las diferentes opciones que hay para enviar emails. Desde el punto de vista de mis necesidades concretas, el método tiene que cumplir tres características:
1- Que el mensaje sea enviado de forma totalmente automática, sin intervención humana.
2- Que el mensaje pueda llevar un fichero adjunto.
3- Que los parámetros del mensaje (destinatario, título, cuerpo, fichero adjunto) puedan estar contenidos en variables de Tasker.

Al final añado referencias de otras opciones que he descartado y que tal vez puedan ser adecuadas para otros compañeros. Yo he elegido la app Email Me Pro, de pago (2 euros y pico).
https://play.google.com/store/apps/details?id=com.caramellabs.emailmepro

Es una app independiente, que (sin Tasker) permite enviar mensajes preconfigurados, de forma muy fácil y rápida. Está en inglés, pero se entiende con un nivel de inglés bajo, como es mi caso. Con las explicaciones y los gráficos que voy a poner, creo que incluso puede manejarla quien no sepa nada de inglés.

Una vez descargada la app, lo primero que hay que hacer es abrir el menú y entrar en la opción EMAIL ACOUNTS, donde elegiremos la cuenta de correo con la que haremos los envíos.
905377905378
Por defecto te ofrece elegir tu/s cuenta/s de Gmail, y en tal caso no hay que configurar los detalles técnicos relativos al servidor. Si quieres utilizar otra/s cuenta/s has de elegir CUSTOM y tendrás que escribir manualmente esos detalles del servidor que pueden ser un poco tediosos y pueden dar problemas si no los pones correctamente.
905379
La cuenta que selecciones/configures es la que se utilizará como remite de los mensajes enviados. Por supuesto, necesitas tener autorización para enviar mensajes desde ese servidor y con ese remite.
Una vez que tienes una cuenta configurada, en la pantalla de edición de esa cuenta verás un botón SEND TEST EMAIL, que sirve para enviar un mensaje de prueba y así confirmas si la cuenta está bien configurada.
905405
Si todo va bien se abrirá un cuadro con la confirmación “Success. Email was sent successfully” (Correcto, el correo se ha enviado satisfactoriamente). En tal caso se habrá enviado un mensaje que tenía como remite y como destino la cuenta de correo que has especificado. Encontrarás ese mensaje en la bandeja de entrada de tu correo.
905381
Si la prueba no ha ido bien tendrás que repasar la configuración del servidor o tal vez tengas otros problemas como los que se explican en las siguientes páginas:

Iniciar sesión mediante contraseñas de aplicación.
https://support.google.com/accounts/answer/185833

Permitir que las aplicaciones menos seguras accedan a tu cuenta.
https://support.google.com/accounts/answer/6010255

Error "Contraseña incorrecta"
https://support.google.com/accounts/answer/6009563

Configuración de SMTP de Google Apps para enviar correo desde [...] una aplicación.
https://support.google.com/a/answer/176600

En caso de que el mensaje de prueba haya sido correcto, ya puedes pulsar varias veces el botón de retroceder para cerrar esta app, pues el resto de las cuestiones que nos interesan se hacen desde Tasker.
905382905383
En una tarea de Tasker, añades una acción nueva, del grupo PLUGIN, y en ese grupo elijes la acción EMAIL ME. En Tasker, todas las acciones del grupo PLUGIN tienen una pantalla de configuración idéntica. La clave está en el icono del lápiz (arriba a la derecha) que nos permite configurar los detalles de cada plugin concreto.
905384
Podéis ver que yo he configurado cuatro parámetros mediante variables:

- %mailto es una variable que yo he creado para contener la dirección de correo a la que se envía el mensaje.
- %subject es una variable que he creado para contener el título/asunto del mensaje.
- %body es una variable que he creado para contener el cuerpo del mensaje.
- %pathfile y %namefile son dos variables que se refieren al fichero adjunto. La segunda contiene el nombre-extensión del fichero, y la primera contiene la referencia de la carpeta donde se aloja dicho fichero.

Por supuesto, se podría prescindir de las variables y escribir ahí los valores (fijos) que quieran utilizarse para el mensaje. En mi caso es imprescindible la utilización de variables porque la misma tarea tiene que enviar cosas diferentes cada vez. Para garantizar que eso funciona correctamente he hecho la siguiente tarea de prueba:

Prueba EmailMe plugin (103)
A1: Establecer variable [ Nombre:%mailto A:[email protected] Calcular:Apagado Añadir:Apagado ]
A2: Establecer variable [ Nombre:%subject A:Asunto-del-mensaje Calcular:Apagado Añadir:Apagado ]
A3: Establecer variable [ Nombre:%body A:Cuerpo-del-mensaje Calcular:Apagado Añadir:Apagado ]
A4: Establecer variable [ Nombre:%namefile A:Aspiradora.jpg Calcular:Apagado Añadir:Apagado ]
A5: Establecer variable [ Nombre:%pathfile A://com.android.externalstorage.documents/document/primary%3AFotos%2FIconos%2F Calcular:Apagado Añadir:Apagado ]
A6: Email Me Pro [ Configuración:To: %mailto, Subject: %subject, Body: %body Cuenta atrás (segundos):0 ]
A7: Flash [ Texto:%mailto -- %subject -- %body -- %pathfile%namefile Largo:Encendido ]

La acción FLASH del final (A7) sirve para confirmar visualmente los datos, y también para asegurar que la tarea se ha ejecutado completa. La acción anterior (A6: Email Me Pro) no tiene activada la casilla CONTINUAR TAREA TRAS ERROR, con lo cual cualquier error detendría ahí la tarea y yo me daría cuenta porque entonces no aparece el Flash del final.

Lo más extraño de este plugin es la forma en que gestiona la ruta/path del archivo adjunto. El archivo que estoy utilizando para probar se llama Aspiradora.jpg y está en la carpeta Fotos/Iconos de la tarjeta de memoria.
Si utilizo la acción ABRIR ARCHIVO y lo selecciono utilizando la lupa, en la configuración de la acción me queda escrita la siguiente referencia del fichero
Fotos/Iconos/Aspiradora.jpg
En otras ocasiones he tenido que utilizar la referencia URI (Uniform Resource Identifier, Identificador Uniforme de Recursos):
file:///sdcard/Fotos/Iconos/Aspiradora.jpg
Pero con este plugin, si utilizo una de esas dos referencias, ocurre que el fichero adjunto no es enviado (el mensaje sí, pero sin fichero).

Utilizando la opción ADD ATACHMENT que hay al final y que sirve igualmente para seleccionar el fichero, aparece escrita esta extraña referencia:
content://com.android.externalstorage.documents/document/primary%3AFotos%2FIconos%2FAspiradora.jpg

Lo cual, traducido a "lenguaje de humanos" se vería del modo siguiente:

content://com.android.externalstorage.documents/document/primary:Fotos/Iconos/Aspiradora.jpg

Puesto que –al menos para mí- tiene bastante lógica utilizar una variable para el path y otra para el nombre del archivo, lo he dividido de esa forma, y en la variable %pathfile tengo que poner lo siguiente (y funciona bien):

//com.android.externalstorage.documents/document/primary%3AFotos%2FIconos%2F

Ventajas de utilizar Email Me Pro (motivos por los que esta app me parece la mejor, o -para ser exactos- la menos mala):

- Creo que es el único sistema que puede asumir reintentos en la transmisión del mensaje. Si el primer intento de enviar el mensaje falla, la app reintentará la transmisión cada 10 minutos, hasta 10 reintentos (se pueden modificar esos detalles, yo he puesto 5 minutos, 120 reintentos). Esto es importante por cuestiones como la siguiente: Puede ocurrir que la tarea Tasker se active cuando no tengo cobertura telefónica ni wifi; en tales casos, Tasker finaliza la tarea normalmente, y es la app Email Me Pro la que se queda encargada de reintentar el envío. Por lo que he leído y probado, ninguno de los otros plugins o métodos hace estos reintentos automáticos para enviar un mensaje que hubiera fallado en el primer intento de transmisión.
905559
Abriendo el menú de Email Me Pro se puede ver el AUTO SEND LOG, que es el histórico de mensajes procesados. Para cada mensaje, en la parte derecha aparece una indicación de su estado: SUCCESSFUL (el mensaje se ha enviado bien); WAITING TO RETRY (en espera para reintentar el envío); SENDING (en este momento se está haciendo un intento de transmisión), o FAILED (fallado y ya no se va a reintentar más). Haciendo una pulsación larga sobre cualquiera de los mensajes podremos elegir entre reintentar el envío (Retry) o borrar ese mensaje definitivamente (Delete).

- De las opciones (plugins) que he visto, es la mejor acabada y la más amigable. Por ejemplo, es fácil configurar la cuenta de correo y permite hacer una prueba para comprobar que eso esté bien configurado.


Inconvenientes de Email Me Pro:

- El desarrollador ha dejado de prestar atención a esta app. La app lleva más de un año sin actualizarse (marzo 2015). Además, el desarrollador tenía una página web que ya no existe (dominio en venta). Según comentarios de algún internauta, el desarrollador tampoco contesta a los emails que le envían. Así, los usuarios nos encontramos sin ningún tipo de soporte o asistencia. Lo advierte en la descripción de la app:
** Please note that this app is no longer supported. You may still install it, but no enhancements will be made and no bugs will be fixed. **

- La forma de referenciar las carpetas o rutas de los ficheros es muy extraña y poco amigable.

- Al exportar la descripción de la tarea no se exportan ciertos detalles como la información del fichero adjunto.

- No hay versión en español, solo en inglés.

- La versión Pro cuesta dos euros y pico. Creo que la otra versión, gratuita, no incluye el plugin para Tasker. Tiene mucha guasa que el desarrollador haya dejado de dar soporte, pero siga cobrando por cada descarga.


Y con esto doy por cerrado mi análisis de la app Email Me Pro. Ahora añado las referencias de otros tres plugins que sirven para enviar emails; están indexados en nuestro “recopilatorio” y son:

- Email Send Tasker Plugin.
- Locale SendSilentMail Plug-In.
- MailTask.

También he investigado un poco entre otras opciones. En la página siguiente viene la descripción de una tarea que envía un correo-e mediante un intent.
https://www.reddit.com/r/tasker/comments/3aaibc/plugin_to_send_email_with_attachment/
Lo he probado, la exportación en español es la siguiente:

Prueba intent email (99)
A1: Probar Archivo [ Tipo:Directorio principal Datos:Fotos/Iconos/Aspiradora.jpg Almacenar Resultado en:%dir Usar Root:Apagado ]
A2: Probar Archivo [ Tipo:Nombre Datos:Fotos/Iconos/Aspiradora.jpg Almacenar Resultado en:%name Usar Root:Apagado ]
A3: Establecer variable [ Nombre:%path A:%dir/%name Calcular:Apagado Añadir:Apagado ]
A4: Java Function [ Devolver:file Class Or Object:File Función:new
{File} (String) Param:%path Param: Param: Param: Param: Param: Param: ]
A5: Java Function [ Devolver:uri Class Or Object:Uri Función:fromFile
{Uri} (File) Param:file Param: Param: Param: Param: Param: Param: ]
A6: Java Function [ Devolver:%exists Class Or Object:file Función:exists
{boolean} () Param: Param: Param: Param: Param: Param: Param: ]
A7: Enviar Intent [ Acción:android.intent.action.SEND Categ.:None Tipo Mime:application/zip Datos: Extra:android.intent.extra.TEXT: This is the body Extra:android.intent.extra.SUBJECT: This is a Subject Extra:android.intent.extra.STREAM: uri Paquete: Clase: Objetivo:Activity ] Si (if) [ %exists ~ true ]
A9: Flash [ Texto:< %path > NO EXISTE Largo:Encendido ] Si (if) [ %exists ~ false ]

Este procedimiento tiene varios problemas, al menos para mí: La acción A7-ENVIAR INTENT solo tiene tres campos EXTRA, con lo cual no es posible ponerle los cuatro datos que me interesan (destinatario, título, cuerpo, fichero adjunto). En este caso la tarea deja sin establecer el destinatario, que hemos de ponerlo a mano cada vez. Cuando se ejecuta la tarea debemos elegir cuál app de correo queremos utilizar para recoger y gestionar el intent. Yo elijo hacerlo con la app Gmail, así que se me abre Gmail con un mensaje nuevo en el que yo tengo que indicar a quién va dirigido el mensaje; y esto hay que hacerlo cada vez que se ejecuta la tarea. Creo que, aunque en el Intent se indique el destinatario, igualmente se abriría la app de correo para que confirmásemos manualmente el envío del mensaje.

En Reddit y Wikidot hay secciones específicas de Tasker, en las que sugieren utilizar SL4A.

SL4A es una capa de secuencias de comandos [-scripts-] para Android, que amplía de forma importante las capacidades de Tasker y del smartphone. […] Sin embargo, si no reres un programador, encontrarás que es difícil escribir tus propios scripts. Ésto no es para los débiles de corazón, así que prepárate para pasar mucho tiempo aprendiendo a usarlo. Traducido de http://tasker.wikidot.com/sl4a

Esa página dedicada al SL4A tiene incluso una sección dedicada al asunto que nos ocupa: "Send email with attachments".
He descartado este procedimiento porque parece demasiado complejo para mis capacidades; me toca admitir que soy débil de corazón :oh:

Eso es todo, por ahora. Os animo a comentar vuestras experiencias en el envío de correos electrónicos, o preguntar al respecto.
:cucu:

WillyWeb
24/07/16, 11:33:26
Mientras daba una tercera vuelta al recopilatorio (ya casi está listo) me he encontrado este plugin...

https://play.google.com/store/apps/details?id=com.stedo.sendsilentmail

A primera vista cumple con todos tus requisitos. ¿Te apetece probar su funcionamiento? :silbando:

Caravantes
25/07/16, 00:36:55
¿Te apetece probar su funcionamiento?

En mi primer mensaje ya había mencionado ese plugin "Locale SendSilentMail Plug-In", y otros dos que también tenemos en el recopilatorio. No había querido probarlo porque las pantallas que había visto en Google Play y la información no me gustaban.

Pero si me lo sugieres tú -cariñito mío- no puedo negarme. Así que lo he descargado y lo he probado.

El primer problema es que solo es un plugin, no tiene una app independiente, y por tanto toda la configuración (que es poca) está en la pantalla de la acción. Con EmailMe tengo -aparte de Tasker- la configuración de la cuenta y su test, las preferencias y también tengo aparte el "log" (histórico) de mensajes.

Con este Locale SendSilentMail no hay nada fuera de Tasker. Si pulso en su icono... directamente me lleva a Tasker porque no hay ninguna otra cosa que mostrar. Dentro de Tasker, la acción del plugin tiene su pantalla de configuración y ahí está todo el meollo. Hay que comenzar poniendo los datos del servidor y de la cuenta de correo; más abajo ponemos los datos del mensaje; y al final de todo tenemos el botón TEST que sirve para probar la transmisión con el servidor.

Mi primer problema era que ese test me daba un error "Unknown username or password", muy extraño porque yo veía que todo estaba bien.

A los pocos minutos recibo un mensaje de Google, en los siguientes términos:

Alguien acaba de intentar iniciar sesión en tu cuenta de Google, en una aplicación que no cumple los estándares de seguridad modernos [...] Te recomendamos encarecidamente que utilices una aplicación segura, como Gmail, [...] No obstante, si utilizas una aplicación menos segura, tu cuenta puede volverse más vulnerable. Google ha detenido este intento de inicio de sesión, pero deberías revisar los dispositivos que has utilizado recientemente [...]

Ese mensaje incluía un enlace con más explicaciones y el acceso a la página donde he configurado que quiero permitir el acceso a las apps menos seguras. [He añadido ese enlace y algún otro adicional, a mi primer post, para que sirva de pista a quien tenga dificultades con los test.]

Tras eso vuelvo a intentar el test, una y otra vez, sin éxito; en todos los casos me devuelve la siguiente información del fallo: "Invalid Addresses. Could not connect to SMTP. Host: smtp.gmail.com, port: 465, response: -1.

Ya estaba a punto de abandonar por desesperación, cuando se me ha ocurrido probar a ejecutar la tarea de todas formas, aunque no haya superado el test.

Y resulta que la tarea sí funciona. Enseguida, el mensaje aparece en mi bandeja de entrada. O sea que lo que falla es el test, lo cual es muy desconcertante.

Como digo, el plugin funciona, los mensajes son enviados. La transmisión del mensaje y el fichero adjunto son correctas. Este plugin admite el uso de variables para los parámetros (destinatario, título, cuerpo, fichero adjunto), como yo necesito. La identificación del fichero adjunto (y su path) se hace por procedimientos normales de Tasker, no como en el extraño caso del EmailMe que ya comenté. Pero este plugin es menos amigable en otras muchas cosas, como por ejemplo que no me permite elegir las variables de una lista, como suele ser habitual en Tasker; hay que escribir las variables a mano, aunque eso es un problema menor.

Ahí se acaba todo, el plugin no ofrece más opciones, y eso me lleva a una reflexión al respecto de los reintentos de transmisión. Me refiero al caso de que la tarea se ejecute cuando no hay conexión. EmailMe viene preconfigurado para reintentos cada 10 minutos, hasta 10 reintentos totales (esos valores se pueden cambiar). En este plugin no hay ninguna información detallada al respecto, y no hay ninguna pantalla donde se puedan configurar estos detalles.

De todas formas, en Google-play, la descripción del plugin dice: "Mail-Queue (no more lost E-Mails if no (allowed) network is present)". Eso me hacía pensar que este plugin también haría algún tipo de reintento, en el caso de que el primer intento de transmisión no hubiera terminado con éxito.

Para comprobarlo, pongo el smartphone en modo avión, ejecuto la tarea que envía el mensaje, espero un minuto y luego desactivo el modo avión. Dos horas después el mensaje sigue sin llegar a mi bandeja de entrada, lo cual me hace sospechar que este plugin no hace ningún tipo de reintento en las transmisiones.

Con la app EmailMe también tenía otra cosa interesante: había un "Log", un histórico de los mensajes procesados, con la información de cada mensaje y su estado: Sending, Successful, Waiting to retry, Failed [inicalmente puse una captura de pantalla sobre ésto, luego la cambié por otra en la que se ven esos cuatro casos]. En esa pantalla se podía hacer una pulsación larga sobre cualquier mensaje para ordenar su reenvío. Pues con este plugin Locale SendSilentMail no hay forma de ver nada parecido, no hay ningún registro histórico ni posibilidad de reenvío manual. Y por la prueba que he hecho, deduzco que tampoco hay ningún reenvío automático.

Esto es una carencia muy importante que me hace rechazar este plugin... pero solo porque hay otro "un poco menos malo" que sí cumple bien con este asunto.

Me sigue sorprendiendo que, para enviar emails, no haya mejores plugins, ni gratuitos ni de pago.
Email Me Pro tiene entre 5.000 y 10.000 instalaciones, a dos euros y pico cada una.
Locale SendSilentMail tiene entre 1.000 y 5.000, a 79 céntimos cada una.
Ambas apps tienen más de cuatro estrellas (de cinco). O sea que somos pocos los usuarios que necesitamos este tipo de apps, y además parece que somos muy conformistas o generosos al puntuarlas.

WillyWeb
25/07/16, 00:44:10
"Mail-Queue (no more lost E-Mails if no (allowed) network is present)"

Pues justo por eso te lo he dicho ... menudo chasco :oh:

Pero si me lo sugieres tú -cariñito mío- no puedo negarme.

Sobre eso, ya hablaremos ... pirata :risitas: