Php Imap y RC2 LimeSurvey Api


Intentando automatizar las invitaciones de LimeSurvey y luego de no tener ninguna ayuda de su comunidad online decidí hacerlo solo de tal modo que ahora tengo un script funcional que hoy compartiré con ustedes.
lo que hace básicamente es conectarse a una cuenta de correo gmail ver los correos sin leer, extraer alguna data del subject y del body, luego de extraer los datos que nos importan como por ejemplo nombre del cliente y su correo electrónico,  de tal forma que los separamos por subject y luego los agregamos a la encuesta a la que corresponda, para finalmente enviar las invitaciones para que llenen la encuesta correspondiente. bueno manos a la obra. 
Untitled

	
		</b>[ A-Survey | somedomain ]<b>
		 charset="utf-8">
		
		
		
	
require_once 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::getInstance(); $hostname = '{imap.gmail.com:993/ssl/novalidate-cert}INBOX'; $username = 'encuestas@somedomain.cl'; $password = 'somepass'; /* intenta conectar */ $inbox = imap_open($hostname,$username,$password) or die('No se puede conectar a Gmail: ' . imap_last_error()); /* toma los emails */ $emails = imap_search($inbox,'UNSEEN'); echo "
"
; if($emails) { /* variable de salida */ $output = ''; /* Colocamos los nuevos emails arriba */ rsort($emails); /* por cada email... */ $i=0; $aReserva = array(); $aPromesa = array(); foreach($emails as $email_number) { $overview = imap_fetch_overview($inbox,$email_number,0); $message = imap_fetchbody($inbox,$email_number,1); switch($overview[0]->subject){ case "RESERVA CREACION": $aProyecto = explode('PROYECTO: ',str_replace(' ','',$message)); $aEtapa = explode('ETAPA: ',str_replace(' ','',$message)); $aProducto = explode('PRODUCTO: ',str_replace(' ','',$message)); $aCliente = explode('CLIENTE: ',str_replace(' ','',$message)); $aEmail = explode('EMAIL: ',str_replace(' ','',$message)); $aProyecto =(str_word_count(recortar_texto($aProyecto[1],24),2,' ')); $aEtapa =(str_word_count(recortar_texto($aEtapa[1],17),2,' ')); $aProducto =(str_word_count(recortar_texto($aProducto[1],5),2,' ')); $aCliente =(str_word_count(recortar_texto($aCliente[1],40),2,' ')); $aEmail =(str_word_count(recortar_texto($aEmail[1],40),2,' .@-_0123456789')); $aProyecto = trim($aProyecto[0]); $aEtapa = trim($aEtapa[0]); $aProducto =trim($aProducto[0]); $aCliente =trim($aCliente[0]); $aEmail =trim($aEmail[0]); $aReserva['user'.$email_number] = array('firstname'=>$aCliente,'lastname'=>' ','email'=>$aEmail,'language'=>'es'); break; case "PROMESA FIRMA CLIENTE": $aProyecto = explode('PROYECTO: ',str_replace(' ','',$message)); $aEtapa = explode('ETAPA: ',str_replace(' ','',$message)); $aCliente = explode('CLIENTE: ',str_replace(' ','',$message)); $aEmail = explode('EMAIL: ',str_replace(' ','',$message)); $aProyecto = (str_word_count(recortar_texto($aProyecto[1],24),2,' ')); $aEtapa = (str_word_count(recortar_texto($aEtapa[1],17),2,' ')); $aCliente = (str_word_count(recortar_texto($aCliente[1],40),2,' ')); $aEmail = (str_word_count(recortar_texto($aEmail[1],40),2,' .@-_0123456789')); $aProyecto = trim($aProyecto[0]); $aEtapa = trim($aEtapa[0]); $aCliente =trim($aCliente[0]); $aEmail =trim($aEmail[0]); $aPromesa['user'.$email_number] = array('firstname'=>$aCliente,'lastname'=>' ','email'=>$aEmail,'language'=>'es'); break; case "ESCRITURA": break; case "POSVENTA": break; default : break; } /* la salida de la información de cabecera */ $output.= '
(
$overview[0]->seen ? 'read' : 'unread').'">'; $output.= ''.$overview[0]->subject.' '; $output.= ''.$overview[0]->from.''; $output.= 'on '.$overview[0]->date.''; $output.= '
'; /* la salida del body en el mensaje */ $output.= '
'
.$message.''; } echo $output; if(!empty($aReserva)){ $client = new Zend_XmlRpc_Client('http://somedomain/survey/index.php/admin/remotecontrol'); $sessionkey = $client->call('get_session_key', array('admin','somepass')); $sid = 248519; $result = $client->call('add_participants', array($sessionkey,$sid,$aReserva)); $result = $client->call('invite_participants', array($sessionkey,$sid)); $result = $client->call('release_session_key', $sessionkey); } if(!empty($aPromesa)){ $client = new Zend_XmlRpc_Client('http://somedomain/survey/index.php/admin/remotecontrol'); $sessionkey = $client->call('get_session_key', array('admin','somepass')); $sid = 345549; $result = $client->call('add_participants', array($sessionkey,$sid,$aPromesa)); $result = $client->call('invite_participants', array($sessionkey,$sid)); $result = $client->call('release_session_key', $sessionkey); } } else{ echo "--No hay Correos sin Leer--\n"; } /* Cerramos la connexión imap */ imap_close($inbox); /* funcion para recortar el texto del body en el correo */ function recortar_texto($string, $length=NULL){ if ($length == NULL){ $length = 50; } $stringDisplay = substr(strip_tags($string), 0, $length); if (strlen(strip_tags($string)) > $length){ $stringDisplay .= ''; } return $stringDisplay; } ?>

Comentarios

Entradas populares