[MySQL + MAIL] Cargar un campo desde un mail

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • CcCamikaze
    Langosta espía
    • 28-04-2003
    • 45790

    #1

    [MySQL + MAIL] Cargar un campo desde un mail

    Buenas

    tengo que hacer que un campo de una DB se grabe con un mail.


    onda:


    mando un mail a mail@host.com
    y el contenido del mail se graba en un campo de una tabla (mysql)

    pero no tengo ni idea.

    alguna idea?

    gracias
  • Vicenzo
    Pero qué carajos...
    • 29-09-2009
    • 11893

    #2
    Vicensurfista

    Comentario

    • CcCamikaze
      Langosta espía
      • 28-04-2003
      • 45790

      #3
      che alguna idea con esto?

      Comentario

      • Tinix
        Laetitia
        • 07-06-2003
        • 8549

        #4
        Esto te sirve?

        The SQL UPDATE statement is used to update existing records in a table.
        ♫_♫



        Oh, no! mi reputación; oh, no.

        Comentario

        • MoaLaiSkirulais
          ^^(V)^^
          • 08-07-2003
          • 23268

          #5
          cami antes de triguerear el mail no alcanza con hacer un simple UPDATE/INSERT en esa tabla q decis?
          no se si entiendo bien....

          Comentario

          • CcCamikaze
            Langosta espía
            • 28-04-2003
            • 45790

            #6
            a ver lo que me pidieron es simple:

            - mandar un mail a xxxxx@xxxx.com

            - el mail tiene que decir por ejemplo:

            "Quakeworld"

            - cuando llega el mail al servidor en un campo de la tabla tiene que grabarse "Quakeworld"

            se entiende?

            pero tiene que ser por mail

            Comentario

            • Vicenzo
              Pero qué carajos...
              • 29-09-2009
              • 11893

              #7
              En el link que puse arriba:
              What do we want?
              We want to write and install a script that handles incoming mail. We want our script not to be reachable by a web browser, but by our email client. Sending an email to script@example.com would suffice for running our script and processing the mail.
              Vicensurfista

              Comentario

              • CcCamikaze
                Langosta espía
                • 28-04-2003
                • 45790

                #8
                ya lo solucione

                era algo mas simple:

                Código PHP:
                
                $mbox = imap_open("{mail.tudominio.com:143}INBOX", "user@dominio.com", "password");
                
                $contenido_email = imap_body( $mbox, imap_num_msg( $mbox ) );
                $asunto_email = imap_headerinfo( $mbox, imap_num_msg( $mbox ) );
                
                $usuario = preg_replace( "/usuario=([a-zA-Z0-9]);/", "$1", $asunto_email->subject );
                
                echo "$usuario <br /><br /><br /><br />";
                
                echo $contenido_email . " - - - - " . $asunto_email->subject;
                
                imap_close($mbox); 
                

                Comentario

                • CcCamikaze
                  Langosta espía
                  • 28-04-2003
                  • 45790

                  #9
                  y aca esta el script final



                  lo que hace es lo siguiente: revisa los mails y si hay algo lo carga en una tabla de tickets y luego mueve el / los mails a una carpeta. La secunecia es asi:


                  - Abre el mail que le seteamos
                  - Chequea la cantidad de mensajes que hay en la casilla, si es 0 (no hay mensajes nuevos) no hace nada
                  - Si hay algun mensaje recorre uno por uno el / los mensaje ejecutando el script
                  - Extrae todos los datos del mail (mail, body y agrega datos default del ticket)
                  - Con el mail desde donde enviamos revisa si existe en 2 DBs distintas
                  - Si existe (o sea se comprubea que se esta enviando desde una direccion que reconocemos) se carga el ticket y se envia un mail al cliente diciendole que esta OK.
                  - Si no se pudo comprobar no se carga en la DB y se le envia un mail de que no se cargo el ticket al cliente.
                  - Se mueve el mail a la casilla de CARGADOS ( si no se pudo corroborar el mail no se mueve)

                  y eso es todo.


                  Especificaciones: Pueden enviarse mails con texto plano o en HTML, no procesa datos o archivos adjuntos.

                  BUGS a resolver: Si envias un texto con firmas desde Thunderbird no reconoce el body por ende no te carga el cuerpo del mensaje




                  Código PHP:
                  
                  <?php
                  
                  
                  
                  header("Content-Type: text/html;charset=utf-8");
                  
                  //abro la casilla de mail
                  $mbox = imap_open("{mail.host.com:143}INBOX", "cuenta@host.com", "password");
                  
                  //reviso la cantidad de mensajes
                  $num = imap_num_msg($mbox);
                  
                  
                                              
                  // si no hay mensajes que no haga nada
                  if($num == 0){
                  
                  }else{
                  
                  
                                              // veo cuantos mensajes hay, los cargo y los muevos
                                              for ($i = 1; $i <= $num; ++$i) {
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              //extraigo el header y el body
                                              //$contenido_email = imap_body($mbox, $num);
                                              $asunto_email = imap_headerinfo( $mbox, $i );
                                              $contenido_email = imap_qprint(imap_fetchbody( $mbox, $i, 1 ));
                                              
                                              
                                              //saco el host del mail
                                              $host = $asunto_email->from[0]->host;
                                              $mailbox = $asunto_email->from[0]->mailbox;
                                              $from_mail = $mailbox."@".$host;
                                              
                                              //titulo del ticcket
                                              $titulo = $asunto_email->subject;
                                              
                                      
                                              
                                              
                                              
                                              
                                              
                                                          ////////////////////////////////////////////
                                                          //// DATOS DEFAULT DEL TICKET //////////////
                                                          ////////////////////////////////////////////
                                                          
                                                          
                                                          $tick_tabla = "tabla";
                                                          $tipo = "NUE";
                                                          $oper = "A CONTESTAR";
                                                          $oper_nombre = "No asignado";
                                                          $fechaFull =     date("Y-m-d H:i:s");
                                                          $oper_email = "usuario@host.com";
                                                          $aviso = "0";
                                                          $ticket_prioridad = "2";
                                                          
                                              
                                                          
                                                          /////////////////////////////////////////////////////////////////////
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                              
                                                                  // BUSCO LOS DATOS DE CLIENTE
                                                                  
                                                                  $db_conexion_operator= mysql_connect("localhost", "user", "pass");
                                                                  
                                                                  mysql_select_db("nombre_de_la_DB");
                                                                  
                                                                  
                                                                  //// BUSCO EL NOMBRE DE LA EMPRESA ///////////////////////////////////////////////////////////////////
                                                                  
                                                                              $datos_agencia = mysql_query("SELECT * FROM tabla WHERE campo= '$from_mail'");
                                                                              $array_agencia = mysql_fetch_array($datos_agencia);
                                                                              
                                                                              
                                                                              $user_agencia_cod = $array_agencia['Agencia'];
                                                                              $Usuario = $array_agencia['Usuario'];                    
                                                                              $nomb_user = $array_agencia['Nombre'];
                                                                              $email_DB = $array_agencia['Email'];
                                                                              $cant_regis = mysql_num_rows($datos_agencia);
                                                                              
                                                                              mysql_select_db("nombre_de_la_DB");
                                                                              
                                                                              //extraigo el nombre de la agencia de la tabla de agencias PRINCIPAL
                                                                              $datos_nombre_agencia = mysql_query("SELECT * FROM nombre_de_la_DB.tabla WHERE campo= '$user_agencia_cod'");
                                                                              $array_nombre_agencia = mysql_fetch_array($datos_nombre_agencia);
                                                                              
                                                                              $nomb_emp = $array_nombre_agencia['EMP_NAME'];
                                                                              
                                                                              $enviar_mail = $cant_regis;
                                                                              
                                                                  ////////////////////////////////////////////////////////////////////////////////////////////////////
                                              
                                              
                                                                                          // Si el usuario no tiene mail en la base de clientes buscamos en la base de usuarios de PRINCIPAL
                                                                                          if( $cant_regis == 0 ){
                                                                                          
                                                                                          mysql_select_db("nombre_de_la_DB");
                                                                                          
                                                                                          //// BUSCO EL USUARIO EN LA TABLA PRINCIPAL////////////////////////////////////////////////////////
                                                                              
                                                                                                      $datos_usuarios = mysql_query("SELECT * FROM tabla WHERE campo= '$user_email'");
                                                                                                      $array_usuarios = mysql_fetch_array($datos_usuarios);
                                                                                                      
                                                                                                      $nomb_user = $array_usuarios['Nombre'];
                                                                                                      $Usuario = $array_usuarios['Usuario'];
                                                                                                      $nomb_emp = "ESTUDIO XXX";
                                                                                                      $user_agencia_cod = "POS";
                                                                                                      $email_DB = $array_usuarios['Email'];
                                                                                                      $cant_regis_users = mysql_num_rows($datos_usuarios);
                                                                                                      $enviar_mail = $cant_regis_users;
                                                                                          }            
                                                                                          //////////////////////////////////////////////////////////////////////////////////////////////////////
                                              
                                              
                                              
                                                                                  
                                                                                          
                                              
                                              
                                              
                                              
                                                  
                  switch ( $enviar_mail ) {
                                                              
                  case "0":
                                              
                  // Si el codigo de la agencia NO es correcto enviamos un mail y no grabamos en la DB
                  mail("$from_mail","Error de carga de Ticket","
                                              
                                              
                                              
                  El Sistema de Carga de Ticket Externo le informa que su ticket no ha sido cargado debido su e-mail no esta registrado en nuestro sitio.
                                              
                  Datos enviados:
                                              
                  Titulo del ticket: $titulo
                                              
                  Mensaje: $contenido_email
                                              
                                              
                  Por favor contactese con nosotros para que lo demos de alta.
                  Muchas Gracias
                                              
                                              
                  ");
                                              
                  break;
                                              
                                              
                                              
                                              
                                              
                                              case ($enviar_mail >= 1):
                                              
                                              
                                              
                                              mysql_select_db("nombre_de_la_DB");
                                                                              
                                                  
                                                  
                                              
                                              
                                              
                                              
                                              
                                              
                                                                  
                                                                  // le decimos a la consulta que envie los datos a mysql en UTF8 xq sino solo sirve para el navegador
                                                                  mysql_query("SET NAMES utf8");    
                                                                  mysql_query("INSERT INTO $tick_tabla(
                                                                  
                                                                  tipo,
                                                                  user,
                                                                  user_nombre,
                                                                  cod_emp,
                                                                  nomb_emp,
                                                                  oper,
                                                                  oper_nombre,
                                                                  fecha,
                                                                  user_email,
                                                                  oper_email,
                                                                  titulo, 
                                                                  descripcion,
                                                                  acciones,
                                                                  operativo,
                                                                  admin,
                                                                  imagen1,
                                                                  aviso,
                                                                  ticket_prioridad
                                                                  
                                                                  ) values (
                                                                  
                                                                  '$tipo',
                                                                  '$Usuario',
                                                                  '$nomb_user',
                                                                  '$user_agencia_cod',
                                                                  '$nomb_emp',
                                                                  '$oper',
                                                                  '$oper_nombre',
                                                                  '$fechaFull',
                                                                  '$from_mail',
                                                                  '$oper_email',
                                                                  '$titulo',
                                                                  '$contenido_email',
                                                                  '$acciones',
                                                                  '$operativo',
                                                                  '$admin',
                                                                  '$imagen1',
                                                                  '$aviso',
                                                                  '$ticket_prioridad'
                                                                  
                                                                  )")or die(mysql_error());
                                                                              
                  $ticket_creado = mysql_insert_id();
                                              
                                              
                  // Si el codigo de la agencia es correcto enviamos un mail.
                  mail("$from_mail","Empresa: Ticket Cargado.","
                                              
                  El Sistema de Carga de Ticket Externo le informa que su ticket ha sido cargado exitosamente.
                  El numero de su ticket es: $ticket_creado.
                                              
                  En breve nos contactaremos con usted para hacer el seguimiento del mismo.
                                              
                  Muchas Gracias
                                              
                                              
                  ");
                  
                  
                  
                                              ////////////////// MUEVO EL MAIL a la carpeta CARGADOS
                                              imap_mail_move($mbox,1,"INBOX.cargados"); 
                                              imap_expunge($mbox);                        
                                          
                  break;
                                                          
                                                          
                                              }
                                              
                                                                      
                  
                                                                                     
                                                       } // cierro el for
                                              
                                              } //cierro el if
                                              
                  
                  
                  
                  
                  imap_close($mbox);
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  
                  /////////// SCRIPTS que no sirvieron en este caso pero son utiles
                  
                  
                  
                  /////////////////////////////////////////////////////////////////////////////
                  //$descripcion = str_replace('\'', "", $descripcion);
                  //elimino las ' de la descripcion
                  
                  /*
                  function cleanQuery( $descripcion ){
                  
                       if( get_magic_quotes_gpc() ) {
                              $descripcion = stripslashes($descripcion);
                       }
                   
                   $descripcion = mysql_real_escape_string( $descripcion );
                   
                   return $descripcion;
                  }
                  
                  $descripcion = cleanQuery($descripcion);
                  
                  /////////////////////////////////////////////////////////////////////////////
                  
                  
                  */
                  
                  
                  
                  ///////////////////////////////////////////////////////////
                  
                  /*
                  
                  // filtro los caracteres raros
                  $entities = array('=E0','=E1','=E2','=E3','=E4','=E5','=E6','=E7','=E8','=E9','=EA','=EB','=EC','=ED','=EE','=EF','=A9','=AE','=B0','=BD','=C0','=C1','=C2','=C3','=C4','=C5','=C6','=C7','=C8','=C9','=CA','=CB','=CC','=CD','=CE','=CF','=F0','=F1','=F2','=F3','=F4','=F5','=F6','=F7','=F8','=F9','=FA','=FB','=FC','=FD','=FE','=FF','=D0','=D1','=D2','=D3','=D4','=D5','=D6','=D7','=D8','=D9','=DA','=DB','=DC','=DD','=DE','=DF');
                  
                  $reemplazos = array('Ãk','á','â','ã','ä','Ã¥','æ','ç','è','é','ê','ë','ì','Ãk','î','ï','©','®','°','½','À','Á','Â','Ã','Ä','Ã…','Æ','Ç','È','É','Ê','Ë','ÃŒ','Í','ÃŽ','Ï','ð','ñ','ò','ó','ô','õ','ö','÷','ø','ù','ú','û','ü','ý','þ','ÿ','Ð','Ñ','Ã’','Ó','Ô','Õ','Ö','×','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß');
                  $contenido_email3 = str_replace($entities, $reemplazos, $contenido_email);
                  
                  */
                  
                  
                  ////////////////////////////////////////////
                  
                  ?>



                  cualquier sugerencia, critica, mejora, peora (?) es bienvenida.




                  esto fue el PHP Paladin Mailer II para PC y espero que les haya gustado... chau.
                  Editado por última vez por CcCamikaze; 06-10-2011, 12:14 PM.

                  Comentario

                  Trabajando...