* @package gvHIDRA */ include('Mail.php'); include('Mail/mime.php'); define("COL_EMAIL", "dircorreo"); class IgepCorreo { private static $mailQueue = array(); /** * Función que devuelve la dirección de correo de un usuario */ function correoUsuario($usuario) { $respondera = array(); if (empty($usuario)) return $respondera; $conf = ConfigFramework::getConfig(); $dsn = $conf->getDSN('gvh_dsn_ora'); if (empty($dsn)) return $respondera; $conexion = new IgepConexion($dsn); $responder = $conexion->consultar("select u.dcorreoint as \"".COL_EMAIL."\" from tcom_usuarios u where u.usuario = '$usuario'"); if (count($responder)>0) $respondera[0]=$responder[0][COL_EMAIL]; return $respondera; } /** * Función que devuelve la dirección de correo de un nregpgv */ function correoNREGPGV($nregpgv) { $lista = array(); if (empty($nregpgv)) return $lista; if(is_array($nregpgv)) $str_nregpgv= implode("','",$nregpgv); else $str_nregpgv= $nregpgv; return self::correoLista("select u.dcorreoint as \"".COL_EMAIL."\" from tcom_usuarios u where (u.tipousu='N' or u.tipousu='S') and u.nrp in ('$str_nregpgv') group by u.dcorreoint"); } /** Función que devuelve la lista de usuarios a quien enviar el correo según la aplicación * y el módulo */ function correoListaUsuariosModulo($aplicacion,$modulo) { return self::correoLista("select u.dcorreoint as \"".COL_EMAIL."\" from tcom_usuarios u, vcom_modulos_usuarios m where u.usuario = m.usuario and (u.tipousu='N' or u.tipousu='S') and u.dcorreoint is not null and m.modulo = '$modulo' AND m.aplicacion = '$aplicacion' group by u.dcorreoint"); } /** Función que devuelve la lista de todos los usuarios de la aplicación a quien enviar * el correo según el tipo. * 1- todos excluyendo usuarios de tipo role y sólo aquellos de tipo N (normal) o S (sólo listas) */ function correoListaUsuariosAplicacion($aplicacion,$tipo=1) { if ($tipo==1) return self::correoLista("select u.dcorreoint as \"".COL_EMAIL."\" from tcom_aplusu a, tcom_usuarios u where a.usuario=u.USUARIO and a.estadousu<>'R' and (u.tipousu='N' or u.tipousu='S') and u.dcorreoint is not null and a.aplicacion = '$aplicacion' group by u.dcorreoint"); } /** Función que devuelve la lista de usuarios a quien enviar el correo */ function correoLista($selec) { $lista = array(); if (empty($selec)) return $lista; $conf = ConfigFramework::getConfig(); $dsn = $conf->getDSN('gvh_dsn_ora'); if (empty($dsn)) return $lista; $conexion = new IgepConexion($dsn); $direcciones = $conexion->consultar($selec); $destinatarios=array(); foreach ($direcciones as $usupetici) $destinatarios[]=$usupetici[COL_EMAIL]; return $destinatarios; } /** * Función para enviar correos sin ficheros anexados * @param string $from Dirección de correo del usuario que envia * @param string $to Contiene un array con los destinatarios * @param string $subject Asunto del mensaje. * @param string $body Cuerpo (texto) del mensaje. * @param string $responder_a Contiene la dirección de correo del usuario a responder * @param string $poner_dest (Por defecto false) Indica si queremos que en el correo aparezcan todos los destinatarios que reciben el correo. En desarrollo no tiene efecto. */ function sinAnexo($from,$to,$subject,$body,$responder_a,$poner_dest=FALSE) { IgepDebug::setDebug(DEBUG_IGEP, 'Enviando correo a '.count($to).' usuario(s)'); $usus = implode('; ', $to); //Si estamos en desarrollo, enviamos el correo al usuario que se valida //y no a los destinatarios reales if (ConfIgep::es_desarrollo()) { $datosusuario=IgepSession::dameDatosUsuario(); if (isset($datosusuario['correo'])) { if (count($to)>0) //Concatenamos al mensaje los destinatarios reales $body .= SALTO_LINEA.'Destinatarios de correo reales:'.SALTO_LINEA.$usus; $to = array($datosusuario['correo']); } } else { if ($poner_dest) $body = SALTO_LINEA.'Destinatarios del correo:'.SALTO_LINEA.$usus.SALTO_LINEA.SALTO_LINEA.$body; } //Formamos las cabeceras: $headers['From'] = $from; $headers['Reply-to'] = $responder_a; $headers['Subject'] = $subject; // Registramos metodo para enviar cola, cuando finalice la peticion if (empty(self::$mailQueue)) register_shutdown_function(array(__CLASS__, 'sendMailsInQueue')); foreach ($to as $email) { $headers['To']=$email; self::$mailQueue[] = array($email,$headers,$body); } return true; } /** * Envia todos los correos en la cola, y vacia la cola */ static function sendMailsInQueue() { IgepDebug::setDebug(DEBUG_IGEP, 'Enviando cola con '.count(self::$mailQueue).' correo(s)'); $mail_object = Mail::factory('smtp', array('host'=>'smtp.gva.es')); foreach (self::$mailQueue as $mail) { $result = $mail_object->send($mail[0], $mail[1], $mail[2]); if (!$result || !($result === TRUE)) IgepDebug::setDebug(WARNING, 'Ha Fallado el envío de correo a "'.$mail[1]['To'].'" con asunto '.$mail[1]['Subject'].'"'); } self::$mailQueue = array(); } /**Función para enviar correos con ficheros anexados * from --> Contiene la dirección de correo del usuario que envia * to --> Contiene un array con los destinatarios * subject --> Asunto del mensaje. * msg --> Texto del mensaje. * responder_a --> Contiene la dirección de correo del usuario a responder * tmp_fich --> Nombre del fichero temporal anexo a enviar en el mensaje. * tipofich --> Tipo de fichero * nom_fich --> Nombre del fichero anexo a enviar en el mensaje * poner_dest --> Indica si queremos que en el correo aparezcan todos los * destinatarios que reciben el correo. En desarrollo no tiene efecto. */ /*Se usa el paquete mail_mime (http://pear.php.net/package-info.php?pacid=21): * - mime.php: Create mime email, with html, attachments, embedded images etc. * - mimePart.php: Advanced method of creating mime messages. * - mimeDecode.php - Decodes mime messages to a usable structure. * - xmail.dtd: An XML DTD to acompany the getXML() method of the decoding class. * - xmail.xsl: An XSLT stylesheet to transform the output of the getXML() method back to an email */ function conAnexo($from,$to,$subject,$msg,$responder_a,$tmp_fich,$tipo_fich,$nom_fich,$poner_dest=FALSE) { ////////////////////// NO ESTÁ PROBADA //////////////////////////// IgepDebug::setDebug(DEBUG_IGEP, 'Enviando correo con anexo a '.count($to).' usuario(s)'); $usus = implode('; ', $to); //Si estamos en desarrollo, enviamos el correo al usuario que se valida //y no a los destinatarios reales if (ConfIgep::es_desarrollo()) { $datosusuario=IgepSession::dameDatosUsuario(); if (isset($datosusuario['correo'])) { if (count($to)>0) //Concatenamos al mensaje los destinatarios reales $msg = $msg.SALTO_LINEA."Destinatarios de correo reales:".SALTO_LINEA.$usus; $to = array($datosusuario['correo']); } } else { if ($poner_dest) $msg = SALTO_LINEA."Destinatarios del correo:".SALTO_LINEA.$usus.SALTO_LINEA.SALTO_LINEA.$msg; } //Cabeceras: $hdrs = array('From'=>$from,'Subject' => $subject,'Reply-to'=> $responder_a); //Creamos el objeto de tipo Mail_mime: $mime = new Mail_mime(SALTO_LINEA); if (!$mime->addAttachment($tmp_fich,$tipo_fich,$nom_fich)) $msg.= SALTO_LINEA." No ha podido anexarse el fichero"; $mime->setTXTBody($msg); $body = $mime->get(); $hdrs = $mime->headers($hdrs); $params['host'] = 'smtp.gva.es'; // Creamos el objeto mail usando el método Mail::factory $mail_object =& Mail::factory('smtp', $params); //Mandamos el mensaje a cada destinatario: $resultado=TRUE; while (list($clave, $valor)=each($to)) { $result = $mail_object->send($valor, $hdrs, $body); if (!$result || !($result === TRUE)) $resultado=FALSE; } return $resultado; } } //Fin de la Clase correo ?>