Buenas tardes, no se si lo que quiero es o no posible, me gustaría saber si es posible recoger el resultado del envio smtp (mediante mail() o phpmailer()) es decir capturar los errores 500, 400 etc.. que da el servidor destino.
Un saludo.
| |||
Obtener el resultado del envio en PHP Buenas tardes, no se si lo que quiero es o no posible, me gustaría saber si es posible recoger el resultado del envio smtp (mediante mail() o phpmailer()) es decir capturar los errores 500, 400 etc.. que da el servidor destino. Un saludo. |
| |||
Respuesta: Obtener el resultado del envio en PHP Y con cuaqluier otro lenguaje (ASP, .NET), una empresa de desarrollo web me ha dicho que puede facilitarme estos datos mediante la aplicación Web no se si es un desvario del comercial o es posible de algún modo. Un saludo y gracia spor tu respuesta. |
| |||
Respuesta: Obtener el resultado del envio en PHP yo tambien estudie eso en su tiempo para unos jodidos spamers xD hay varias aplicaciones en php, script y clases. lo que basicamente necesitas saber es que cuando envias un email hay una comunicacion entre el cliente y el servidor, muy similar a lo que es con http yo en su tiempo hice unos tests ocupando fsockopen lo que haces es que abres una conexion directa con el servidor que recibe el correo osea emulas un servidor smtp, entonces utilizas los comandos de smte para enviar el correo y a medida que vas enviando comandos o datos, el servidor te va dando respuestas. haber incluso te puedes conectar a un servidor pop3 o imap con telnet y vas escribiendo los comandos y el servidor te responde como si fuera una consola puedes probar instalando argosoft mail server (creo que todavia tienen una version gratis) entonces haces o pruebas el script contra tu servidor de correos y vas depurando la info que llega (la mayoria de los servidores de correo tienen un modo para ver en tiempo real los conandos que se estan ejecutando) tambien puedes ir a phpclasses y buscar las librerias que hay, recuerdo que ocupe una que funciono super bien y que era muy facil, busca por "smtp server php" en google o "smtp" en phpclasses
__________________ Ayuda!! firmar y compartir No a la privatizacion de semillas http://www.thepetitionsite.com/1/no-...n-de-semillas/ Mas info: http://chilesintransgenicos.cl/ |
| |||
Respuesta: Obtener el resultado del envio en PHP bibliotec: Pareciera que lo que tu quieres saber es si el cliente abrio el correo o bajo el adjunto que le mandastes. De esa manera puedes depurar tu lista de destinos. Si es asi, puedes hacer lo siguiente -> 1.- Envias un mensaje de correo (html) y al $mensaje le agregas algo asi: $mensaje .= "<br><img src=\"http://tudominio.com/.../CorreoDos.php?uno=$codigohoy\">"; 2.- Cuando el usuario abre el correo activa este enlace que llama a CorreoDos.php con la variable uno que lleva un codigo. 3.- Inmediatamente se establece conexion con CorreoDos.php y recibe la variable uno que acto seguido valida con el codigo enviado. 4.- El archivo CorreoDos.php puede contener lo siguiente -> a.- La debida recepcion de la variable b.- una validacion para evitar abusos c.- Un envio automatico de correo usando mail() hacia tu correo o si tenes un API para SMS un envio de mensaje de texto instantaneo a tu celular. El mensaje dira que acaban de ver el correo xxxxx. 5.- Para que el usuario reciba una imagen pequeña y verdadera al final del archivo CorreoDos.php pones header('Location: celular.gif'); NOTA: No puedes usar echo ni print antes de esta ultima sentencia. Para archivos adjuntos se hace algo similar. Esto lo he probado con los cuatro grandes del correo y funciona sin problemas(gmail, hotmail, yahoo y aol) Asi controlo al 100% los correos enviados. Saludos Franco ![]() |
| |||
Respuesta: Obtener el resultado del envio en PHP Bibliotec: Lo que el amigo Remsankar quiere decir es que una conexion con sockets para enviar correos hacia destinos variados conlleva algo asi -> ESTA ES UNA TIPICA CONEXION CON UN SERVIDOR SMTP!!) //Solicitamos logeo por autenticacion! fputs($conexionsmtp,"AUTH LOGIN" . $nuevalinea); $respuestasmtp = fgets($conexionsmtp, 515); $ArrayLogeo['solicitarautenticacion'] = "$respuestasmtp"; //Enviamos el Nombre de Usuario fputs($conexionsmtp, base64_encode($nombreusuario) . $nuevalinea); $respuestasmtp = fgets($conexionsmtp, 515); $ArrayLogeo['usuarioautenticacion'] = "$respuestasmtp"; //Enviamos la Contraseña fputs($conexionsmtp, base64_encode($contrasena) . $nuevalinea); $respuestasmtp = fgets($conexionsmtp, 515); $ArrayLogeo['contrasenaautenticacion'] = "$respuestasmtp"; Como es facil observar las respuestas son guardadas en un arraylogeo y puedes saber las contestaciones del servido receptor; pero aqui nos estamos metiendo en el corazon del diseño de servidores de correo que no deja de ser harto complicado. Reitero que mi sistema anterior es eficaz, eficiente y probado. Saludo Y espero nos ayude a todos. Franco ![]() P.S. Aqui te incluyo una tipica conexion SMTP entre el que pretende enviar un correo y el que recibe; es curioso obserbar que NO tomo ni un segundo. 04 21:41:08.85:3876: SurgeSMTP 3.9c-1, User connected (123.456.789.012) (999.999.999.999) 04 21:41:08.87:3876: smtp:[123.456.789.012] In: AUTH LOGIN 04 21:41:08.87:3876: smtp:[123.456.789.012] Out: 334 VXNlcm5hbWU6 04 21:41:08.87:3876: smtp:[123.456.789.012] Out: 334 UGFzc3dvcmQ6 04 21:41:08.87:3876: scmd_auth login (franco123) **** 04 21:41:08.87:3876: after call to default domain username=(franco123) 04 21:41:08.87:3876: doing domuser lookup with ([email protected]) username=franco 04 21:41:08.87:3876: scmd: smtp auth trying (franco123) 04 21:41:08.87:3876: scmd: user (franco123) pre () dom (misitio.net) 04 21:41:08.87:3876: scmd: auth (franco123) (misitio.net) OK Cached lookup 04 21:41:08.87:3876: user_send_max: ([email protected]) has max of (5000) 04 21:41:08.87:3876: user_send_rule: ([email protected]) can send to (*) 04 21:41:08.87:3876: smtp:[123.456.789.012] Out: 235 login succeeded 04 21:41:08.87:3876: smtp:[123.456.789.012] In: HELO localhost 04 21:41:08.87:3876: smtp:[123.456.789.012] Out: 250 misitio.net. Hello localhost (999.999.999.999) 04 21:41:08.87:3876: smtp:[123.456.789.012] In: MAIL FROM: <[email protected]> 04 21:41:08.87:3876: scmd: check ban list ([email protected])(<[email protected]>) 04 21:41:08.87:3876: smtp:[123.456.789.012] Out: 250 Command MAIL OK 04 21:41:08.87:3876: smtp:[123.456.789.012] In: RCPT TO: <[email protected]> 04 21:41:08.87:3876: user_send_max: Check limit for ([email protected]) max=5000 user_max=5000 04 21:41:08.87:3876: user_send_max: ([email protected]) is up to 6 out of 5000 04 21:41:08.87:3876: user_send_max: Check limit for ([email protected]) max=500 user_max=5000 04 21:41:08.87:3876: g_user_send_warning: ([email protected]) is up to 6 out of 500 04 21:41:08.87:3876: guess: istrusted=1 loggedin=1 04 21:41:08.87:3876: check rcpt ([email protected]) from (<[email protected]>) 04 21:41:08.87:3876: user_send_max: ([email protected]) add 1. 04 21:41:08.89:3876: response good 250 local recipient ok 04 21:41:08.89:3876: smtp:[123.456.789.012] Out: 250 local recipient ok 04 21:41:08.89:3876: smtp:[123.456.789.012] In: DATA 04 21:41:08.89:3876: scmd: recipient max_in 20971520 04 21:41:08.89:3876: scmd: local_from was happy 04 21:41:08.89:3876: smtp:[123.456.789.012] Out: 354 Command DATA Start mail input; end with <CRLF>.<CRLF> 04 21:41:08.89:3876: Fixing bare lf chars in message 04 21:41:08.89:3876: scmd: Data received 455 bytes 0k/sec OK 04 21:41:08.89:3876: Adding header (X-Originating-IP: 123.456.789.012) 04 21:41:08.89:3876: badfrom 0 badmx 0 badfrommx 0 04 21:41:08.89:3876: not applying badfrom_check as spam_allow matched 74036260 04 21:41:08.89:3876: scmd: Message submitted [1914] OK msg_que_later 04 21:41:08.89:3876: scmd: recipient state [1914] Stored (<[email protected]>) 04 21:41:08.89:3876: smtp:[123.456.789.012] Out: 250 message sent ok 04 21:41:08.89:3876: smtp:[123.456.789.012] In: QUIT 04 21:41:08.89:3876: smtp:[123.456.789.012] Out: 221 Command QUIT, disconnecting 04 21:41:08.89:3876: smtp: Closing connection 123.456.789.012, task took 0 seconds Última edición por franco190453; 24/02/2009 a las 19:02 |
| |||
![]() Muchisimas gracias a todos, lo que quiero hacer va mas en la línea de Remsankar, lo que me comentas franco190453 ya lo he usado pero ahora lo que necesito es controlar los errores de recepción, correos llenos etc. Lo último que me comentas es muy interesante voy a estudiar toda la información que me habeis pasado para haceros mas preguntas, de nuevo muchs gracias a los tres. He descargado y he estado probando la clase SMTP E-mail sending class, he realizado un par de pruebas y tengo un problema con servidores que requieren autenticación me da el siguiente error: "535 5.7.0 Error: authentication failed: authentication failure" Hago un include de la clase sasl para autenticar. ¿Sabeis como solucionarlo de forma sencilla? Un saludo y gracias. Ya se pq es se produce al ejecutar el php fuera del equipo donde esta el smtp ¿esto se puede salvar de alguna manera? Bueno parece que esta clase finalmente tampoco me sirve ya que solo me da información de conexión con servidor de envio no con el de recepción, sabeis alguna que haga la otra parte tb. Gracias. Prueba con seguimiento del mensaje:
Código:
Me responde todo con 250 y oks pero no manda el correo, ¿sabeis a que se debe?<?php //Abrimos la conexión $Conexion = fsockopen("smtp.miservidor.com","25"); //Sacamos el contenido de lo que nos devuelve el servidor antes de seguir $str_recibe = fgets($Conexion,256); echo "<p>"; print_r($str_recibe); echo "</p>"; //Esta es la cadena que dice "Hola". $str_hola = "EHLO programacion.comrn"; if(!fputs($Conexion,$str_hola)) { echo "Imposible decirle hola al servidor."; exit; } else { $str_recibimos = fgets($Conexion,256); echo "<p>"; print_r($str_recibimos); echo "</p>"; } $strMAIL = "MAIL FROM: [email protected] \r\n"; if(!fputs($Conexion,$strMAIL)){ echo "Imposible establecer el origen."; exit; } else { $str_recibimos = fgets($Conexion,256); echo "<p>"; print_r($str_recibimos); echo "</p>"; } $strRCPT .= "RCPT TO: [email protected] \r\n"; if(!fputs($Conexion,$strRCPT)){ echo "Imposible establecer el origen."; exit; } else { $str_recibimos = fgets($Conexion,256); echo "<p>"; print_r($str_recibimos); echo "</p>"; } $strDATA1 = "DATA\r\n"; if(!fputs($Conexion,$strDATA1)){ echo "Error."; exit; } else { $str_recibimos = fgets($Conexion,256); echo "<p>"; print_r($str_recibimos); echo "</p>"; } $strS = "Subject: Prueba de correo \r\n\r\n"; if(!fputs($Conexion,$strS)){ echo "Imposible establecer el asunto."; exit; } else { $str_recibimos = fgets($Conexion,256); echo "<p>"; print_r($str_recibimos); echo "</p>"; } $strDATA2 = "Esto es una prueba. \r\n.\r\n"; if(!fputs($Conexion,$strDATA2)){ echo "Imposible establecer el mensaje."; exit; } else { $str_recibimos = fgets($Conexion,256); echo "<p>"; print_r($str_recibimos); echo "</p>"; } //envio del email //Salimos de la sesión, primero diciendo "Adios" al servidor //y luego cerrando el socket con fclose() if(!fputs($Conexion,"QUITrn")) { echo "No se pudo salir de la sesión con el servidor SMTP"; exit; } else { fclose($Conexion); echo "Cerrado y terminado"; exit; } ?> Un saludo. Última edición por GatorV; 25/02/2009 a las 11:08 |
| ||||
Respuesta: Obtener el resultado del envio en PHP Como te comento eso solo lo puedes saber entrando a la cuenta Postmaster y ya te explique el procedimiento, desconozco si hay un script ya hecho que lo haga pero si vas por los pasos que te comenté lo podrás desarrollar. Saludos ![]() |
| |||
Respuesta: Obtener el resultado del envio en PHP bibliotec: Cita: Primeramente, ponernos a enviar correos utilizando socketsahora lo que necesito es controlar los errores de recepción, correos llenos etc. es mas que todo funcion especifica de un servidor de correo. Por deporte podrias hacer algun codigo para conectar con un servidor y hacer entrega de un correo simple de texto. Y va mas o menos como lo que tu has expuesto. Tu mejor opcion es instalar un servidor de correo completo ya que, normalmente, estos servidores cuando hay errores de entrega u envio reporta de inmediato al administrador via una direccion de correo interna u otra de tu eleccion, bien podria redirecionar esa direccion hacia cualquier direccion de correo externa y asi estaras en total control de lo enviado exitosamente y lo no enviado y sus respectivos errores. Es mas estos servidores aun reportan los retrazos en entregas destinadas a servidores de correos muy congestionados. Saludos Franco ![]() P.s. El codigo que tu tienes adolece de el concepto de intercambio de comunicacion entre el codigo y el servidor SMTP, ya que tu solo utilizas fput, fput, fput, seguido sin esperar respuesta. Cita: Simplemento esto No se hace asi; mas bien mi codigo$strMAIL = "MAIL FROM: [email protected] \r\n"; if(!fputs($Conexion,$strMAIL)){ echo "Imposible establecer el origen."; exit; } else { $str_recibimos = fgets($Conexion,256); echo "<p>"; print_r($str_recibimos); echo "</p>"; } que ya he probado en esa parte especifica yo hago lo siguiente -> Cita: Observa que despues del fputs DEBE venir un FGETS o la comunicacion se corta//Correo Origen fputs($conexionsmtp, "MAIL FROM: $decorreo" . $nuevalinea); $respuestasmtp = fgets($conexionsmtp, 515); $ArrayLogeo['respuestaorigencorreo'] = "$respuestasmtp"; y la respuesta debe ser logeada en un array para despues depositarla en un archivo de texto como log de envios. En vez de estar haciendo "\r\n" cada vez y como hay que utilizarla multiples veces, es mejor que hagas un $nuevalinea = "\r\n"; Última edición por franco190453; 25/02/2009 a las 21:14 |
| |||
Respuesta: Obtener el resultado del envio en PHP Ok Franco vo y aprobarlo del modo que indicas, la verdad es que lo de los saltos de línea ni me habia fijado jejejeje Un saludo y gracias de nuevo. |