sábado, 16 de marzo de 2013

Los mejores trucos para su DRIVE en APAREJADORESMADRID.ORG (IV). Cómo automatizar el archivado de documentos adjuntos desde GMAIL

gdrive05 copia

A veces recibimos documentos adjuntos muy importantes a través del correo y lo procedente sería archivarlos a buen recaudo. ¿No estaría bien que el sistema trabajara por nosotros y lo hiciera automáticamente? Como DRIVE con DOCS es un entorno integrado podemos programar que lo haga así. Así que vamos a programar, y no se asuste. Siguiendo las instrucciones comprobará que es muy sencillo y además no puede romper nada.

Desde la modificación del API de Google Apps de Abril 2015, ESTE SCRIPT YA NO FUNCIONA.


CÓMO FUNCIONA

El programa comprobará cada 10 minutos (porque definimos que sea así mediante un “activador”, podemos elegir más o menos tiempo) si existe algún correo con fichero adjunto en la carpeta-etiqueta “a DRIVE” (que ha sido creada por el propio programa). Si existe algún correo, archivará el fichero adjunto en el directorio “Archivado desde GMAIL” de DRIVE (también creado automáticamente por el programa).

Pero además lo complementamos con un filtro, que comprueba si llega algún correo con un adjunto que contenga en el nombre “factura”. y si es así lo lleva a la etiqueta-carpeta “a DRIVE” para que el programa proceda a su archivado. Esto es, evidentemente un ejemplo. El programa archivará los adjuntos de correos que sean movidos a la carpeta ya automáticamente mediante un filtro; o a mano, marcados por el usuario.

Tiene información detallada para crear sus propios filtros en Buscando y encontrando correos....

 

CÓMO PONERLO EN MARCHA

Copie el script (programa) al final de esta entrada (desde “SCRIPT BEGIN” hasta “SCRIPT END”) y siga paso a paso las instrucciones del vídeo. Pegará el programa, lo grabará, lo autorizará y lo activará. No le llevará más de 10 minutos y le aseguro que es mucho más sencillo de lo que parece. Además, cuando termine podrá presumir de haber programado la automatización de DRIVE.

Video adjunto.
 


Atribuciones: Código publicado por +Sarah Price  modificado por LARdT.

// == SCRIPT BEGIN =============================
/*
* Creamos la etiqueta-carpeta donde se grabaran
* los adjuntos en DOCS.
*
*/
var labelName = "a DRIVE";

/*
* Creamos la carpeta donde DRIVE archivará
* los adjuntos recibidos por correo.
*
*/
var folderName = "Archivado desde GMAIL";

/*
* Creamos la función que archiva el correo y
* lo configuraremos para que se ejecute cada cierto tiempo (X minutos)
* Sólo se archivaran los correos que tengan la etiqueta definida
* más arriba.
*/
function Import_Gmail_Attachments_Into_Google_Docs() {
initLabels();

var threads = getThreads();
var attachments = getAttachments(threads);

saveAttachments(attachments);
removeThreadsFromLabel(threads);
}

// helper functions

function getThreads(){
return getGmailLabel().getThreads();
}

function getMessages(threads){
var res = new Array();
var c = 0;
for(var i in threads){
var messages = threads[i].getMessages();
for(var a in messages){
res[c++]=messages[a];
}
}
return res;
}

function getAttachments(threads){
var res = new Array();
var messages = getMessages(threads);
for(var i in messages){
var attachments = messages[i].getAttachments();
for(var a in attachments){
//Eliminate attachments with same name
res[attachments[a].getName()]=attachments[a];
}
}
return res;
}

function removeThreadsFromLabel(threads){
getGmailLabel().removeFromThreads(threads);
}

function saveAttachments(attachments){
for(var n in attachments){
saveAttachment(attachments[n])
}
}

function saveAttachment(blob){
var folder = getGdocFolder();
var file = folder.createFile(blob);
return file;
}

function getGmailLabel(){
return GmailApp.getUserLabelByName(labelName);
}

function getGdocFolder(){
return DocsList.getFolder(folderName);
}

function initLabels(){
var label = null;

try{
label = getGmailLabel();
}catch(e){
Logger.log(e.getCause());
}

if(!label){
GmailApp.createLabel(labelName);
}

var folder = null;

try{
folder = getGdocFolder();
}catch(e){
Logger.log(e);
}

if(!folder){
DocsList.createFolder(folderName);
}
}
// == SCRIPT END =============================