with tutorial script manager google gmailapp create apps app google-apps-script imap gmail-api

google-apps-script - tutorial - google script send email



¿Cómo editar mensajes de Gmail cuando llegan? (1)

En última instancia, mi objetivo es evitar el seguimiento del correo electrónico a través de imágenes cargadas automáticamente con enlaces únicos. Soy consciente de que Google usa un proxy para cargar las imágenes, por lo que al menos no revelarán mi dirección IP, pero hay ciertas personas y organizaciones que incrustan rastreadores en sus correos electrónicos, y comprueban activamente si leo o no. sus correos electrónicos

Específicamente en la aplicación de Gmail, puedo desactivar la carga automática de imágenes, pero me gustaría tener una protección similar para otras aplicaciones que no tienen esta configuración. Por ejemplo, aparentemente no hay una forma de hacer esto con Google Inbox .

Mi pensamiento actual es escribir un script de fondo que pueda ejecutarse en un correo nuevo (recibido de un evento o de un sondeo frecuente) para convertir imágenes HTML incrustadas en enlaces de hipervínculos a esas imágenes, solo se utilizarán si realmente necesito la imagen. De esa forma, sin importar la aplicación que use para abrir el correo electrónico, tengo el control de cómo y cuándo soy rastreado. La edición de correos electrónicos es algo que he hecho con las API de MS Exchange Server, y estoy buscando una forma de hacerlo con Gmail, por cualquier medio disponible.

Encontré un par de temas de 2010 sobre cómo modificar la línea de asunto utilizando Google Apps Script y Gmail . En ese momento, no se podía hacer eso, pero parece posible que se hayan actualizado desde entonces o que haya soluciones usando la API de Gmail o IMAP.

tl; dr

Para mi cuenta de Gmail, ¿cómo puedo modificar programáticamente (y guardar los cambios) los correos electrónicos recibidos?

Soluciones posibles:

  • Guiones de Google Apps
  • API de Gmail
  • IMAP
  • ¿Otro?

Creo que la API de Gmail se adaptaría perfectamente a tus necesidades.

Supongamos que estoy sondeando mi Bandeja de entrada cada minuto para nuevos mensajes, con Users.messages.list() -request. Tengo cuidado de usar el parámetro after en mi query con el valor de la última vez que revisé mi Bandeja de entrada, como segundos desde la época. Solo solicito los ID de los nuevos mensajes potenciales. También puede suscribirse a los eventos push para mitigar el riesgo de que su usuario presione el mensaje antes de sondear y modificar los mensajes, como lo menciona @Max en los comentarios. Probablemente no sea un problema si el script es solo para ti.

q = after:<TIME_IN_SECONDS_SINCE_EPOCH_OF_LAST_POLL> fields = messages/id GET https://www.googleapis.com/gmail/v1/users/me/messages?fields=messages%2Fid&q=after%3A1437677475478&access_token={YOUR_API_KEY}

Respuesta:

{ "messages": [ { "id": "14ebc16800d1fdc0" }, ... ] }

¡Decir ah! Tengo un nuevo mensaje. Lo entiendo en bruto, decodifico su contenido URL seguro con codificación base64 y le echo un vistazo.

format = raw fields = raw GET https://www.googleapis.com/gmail/v1/users/me/messages/14eb68cb028163ba?fields=raw&format=raw&access_token={YOUR_API_KEY}

Respuesta:

{ "raw": "RGVsaXZlcmVk..." }

Hagamos la decodificación base64 antes mencionada. Reemplace todo el "-" con "+", y "_" con "/" para transformarlo de datos base64 URL seguros a datos regulares codificados en base64.

atob("RGVsaXZlcmVk...".replace(//-/g, ''+'').replace(//_/g, ''/''));

Resultado:

<html lang="en"> <head> <title> Computerphile just uploaded a video </title> . . . <img class="open_tracking_img" src="http://www.youtube.com/attribution_link?a=vi-KC3YA0Qc&u=/gen_204%3Fa%3Dem-uploademail" width="1" height="1"> . . . </html>

Contiene muchas img -tags, seguro.

Extraigo las img , obtengo las URL y elimino todas las img del correo con mi analizador XML favorito.

Después de que se eliminan las etiquetas, simplemente inserto las URL en el correo donde mejor me parezca, y las vuelvo a codificar en los datos URL seguros base64 codificados en los que se recuperaron.

btoa("<html lang="en">...".replace(//+/g, ''-'').replace(////g, ''_''));

Finalmente, elimino el correo original e inserto el modificado.

DELETE https://www.googleapis.com/gmail/v1/users/me/messages/14eb68cb028163ba?access_token={YOUR_API_KEY} POST https://www.googleapis.com/gmail/v1/users/me/messages?access_token={YOUR_API_KEY} { "raw": "RGVsaXZlcmVkLVRvO..." }

Mi nuevo correo modificado ahora está en la bandeja de entrada.