Foros del Web » Programando para Internet » PHP »

Enviar mail sin funcion mail()

Estas en el tema de Enviar mail sin funcion mail() en el foro de PHP en Foros del Web. Para hacerlo debo hacerlo por sockets no? Osea con un simple Código PHP: $fp = fsockopen ( "Ip_server_SMTP" , "port" , "" , "" ); ...
  #1 (permalink)  
Antiguo 02/03/2003, 12:20
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
Enviar mail sin funcion mail()

Para hacerlo debo hacerlo por sockets no?

Osea con un simple

Código PHP:
$fp=fsockopen("Ip_server_SMTP","port","","");
//Yuego algunos fputs para poner el contenido del mail 
O debo hacer algo más.


Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #2 (permalink)  
Antiguo 02/03/2003, 14:14
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Mira en las FAQs: http://www.forosdelweb.com/showthrea...088#post264088

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 02/03/2003, 14:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No es tan sencillo ...

Si lo haces por sockets deberas conectar al SMTP que quieras usar al puerto 23 o el que corresponda y una vez hecha la conexión deberas de "hablar" con el servidor SMTP usando dicho protocoolo ..

Como bien te aconseja josemi .. en la FAQ q te remite tienes un ejemplo. Como veras hay una serie de comandos como el MAIL FROM, EHLO, RCPT TO, DATA y algunos mas que son el propio protocoolo SMTP ..

Un saludo,
  #4 (permalink)  
Antiguo 02/03/2003, 15:00
 
Fecha de Ingreso: febrero-2002
Ubicación: ¿donde vivo? pues en mi casa, ¿donde voy a vivir?...
Mensajes: 214
Antigüedad: 22 años, 1 mes
Puntos: 0
debes sacar el servidor al q pertenece esa cuenta... ejemplo, si e mail es para [email protected] puede, q el servidor de correo q tengas q usar, no sea mail.servidor.com o simplemente acceder al puerto 25 de servidor.com, para esto, debes consultar el registro MX del dominio, (php tiene funciones para hacer esto).
__________________
Linux, es para los que odian Microsoft/Windows, BSD, es para los que amamos *IX.
  #5 (permalink)  
Antiguo 03/03/2003, 17:44
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
Bueno despues de informarme un pococ y estudiar esa FAQ que me dijeron tengo esto:

Código PHP:
<?php

$fp
=fsockopen("200.28.69.6","25",&$errno,&$errstr,20);
if(!
$fp){
echo 
"Error $errno:$errstr";
}else{
 if(!
fputs($fp,"EHLO QK SMTP Server ")){
 echo 
"Imposible saludar";
 }
 if(!
fputs($fp,"MAIL FROM: [email][email protected][/email]")){
 echo 
"Imposible MAIL FROM";
 }
 if(!
fputs($fp,"RCPT TO: [email][email protected][/email]")){
 echo 
"IMposible RCPT TO";
 }
 if(!
fputs($fp,"DATA\r\n(Subject: Asunto\r\n.\r\n)")) {
 echo 
"Imposible DATA subject";
 }
 if(!
fputs($fp,"DATA\r\n(Mensaje\r\n.\r\n)")){
 echo 
"IMpoble enviar mensaje";
 } 
 if(!
fputs($fp,"QUIT\r\n")){
 echo 
"IMposible QUIT";
 }
 if(!
fclose($fp)){
 echo 
"Imposible cerrar conexion";
 }else{
 echo 
"Cerrada conexion";
 }
}
?>
Eso no me muestra ningun error ni tampoco me envia el mail.

Tengo instalado el QK SMTP SERVER y funciona, pero no me funciona este script. Cual es el error que en realidad no se muestra si no que solo no lo envia.

De antemano gracias

Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #6 (permalink)  
Antiguo 04/03/2003, 02:06
 
Fecha de Ingreso: febrero-2002
Ubicación: ¿donde vivo? pues en mi casa, ¿donde voy a vivir?...
Mensajes: 214
Antigüedad: 22 años, 1 mes
Puntos: 0
diria q has de meter carriage despues de cada comando.... no?
__________________
Linux, es para los que odian Microsoft/Windows, BSD, es para los que amamos *IX.
  #7 (permalink)  
Antiguo 04/03/2003, 21:44
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
Bueno lo tengo asi y no me funciona

Código PHP:
<?php

$fp
=fsockopen("200.28.69.6","25",&$errno,&$errstr,20);
if(!
$fp){
echo 
"Error $errno:$errstr";
}else{
 if(!
fputs($fp,"EHLO QK SMTP Server \r\n")){
 echo 
"Imposible saludar";
 }
 if(!
fputs($fp,"MAIL FROM: [email][email protected][/email]\r\n")){
 echo 
"Imposible MAIL FROM";
 }
 if(!
fputs($fp,"RCPT TO: [email][email protected][/email]\r\n")){
 echo 
"IMposible RCPT TO";
 }
 if(!
fputs($fp,"DATA\r\n(Subject: Asunto\r\n.\r\n)")) {
 echo 
"Imposible DATA subject";
 }
 if(!
fputs($fp,"DATA\r\n(Mensaje\r\n.\r\n)")){
 echo 
"IMpoble enviar mensaje";
 } 
 if(!
fputs($fp,"QUIT\r\n")){
 echo 
"IMposible QUIT";
 }
 if(!
fclose($fp)){
 echo 
"Imposible cerrar conexion";
 }else{
 echo 
"Cerrada conexion";
 }
}
?>
Ya no se por que no muestra error solo que no envia el mensaje

Si pueden ayudar genial


Saludos y gracias de antemano
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #8 (permalink)  
Antiguo 05/03/2003, 07:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Estas usando tu propio servidor de correo SMTP en tu PC (junto con PHP) y bajo windows?

Estas usando el QK SMTP Server?¿ ... Porqué no usas mail() .. tan solo tienes que indicar en tu php.ini:

[mail function]
; For Win32 only.
SMTP = localhost

NO la IP que tengas en internet ..si lo usas en "local" (tu servidor SMTP y PHP juntos en el mismo PC ..)

Un saludo,
  #9 (permalink)  
Antiguo 05/03/2003, 16:30
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
Bueno Cluster en realidad lo que quiero es no usar mail() (aunque ya me funciona con mail()) si no que quiero intentarlo con sockets.

Por eso postee ese codigo del cual no tengo idea porque no funciona



Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #10 (permalink)  
Antiguo 05/03/2003, 20:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. la mejor manera de ver porqué no funciona una conexión por sockets cuando "conectas" con cierto servicio y empiezas a "hablar" con el servidor q has conectado .. es justamente "escuchar" que dice ese servidor ante tus peticiones ..

Para "escuchar" una conexión por sockets .. tan solo tienes que usar fgets() y recoger unos cuantos bytes .. Por ejemplo 1024 (1Kbyte .. podria ser menos o mas .. todo depende de lo q entregue como respuesta el servicio que conectes)

Código PHP:
echo fgets ($fp1024)."<br>"
A todo esto .. cada protocoolo que uses ante una petición tuya te devolverá algun código de estado .. sea de error o de "ok" todo bien ..

Para el protocoolo SMPT tienes un listado de estos códigos ante tus peticiones en:
http://www.greenend.org.uk/rjk/2000/...p-replies.html

(estos "codigos" y el propio protocoolo, en este caso el SMTP lo detallan las RFC correspondientes ..)

Con eso veras si por algun sitio falla las peticiones que le estas haciendo .. El "if (fputs ..." solo evalua si pudo hacer la conexión para enviar ciertos datos (paquetes) .. pero no tiene control de lo que va o biene por esa conexión .. para eso tienes que "decodificar" los errores que se producen o los mensajes en general ..

Un saludo,
  #11 (permalink)  
Antiguo 05/03/2003, 20:51
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
Gracias cluster por ese enlace


Sobre el fgets si hago el echo y me muestra

WELCOME TO THE QK SMTP SERVER que es el servdor SMTPque uso lo que significa que si conecto



Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #12 (permalink)  
Antiguo 05/03/2003, 21:06
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 21 años, 5 meses
Puntos: 1
Hice los echo a cada fputs y lo que me devuelve no es un codigo del servidor SMTP si no el numero de letras y/o numero que contiene dicho paramentro es decir

Código PHP:
echo fputs($fp,"EHLO\r\n"); 
devuelve 6 y si dentro de las comillas hay mas letras y/o numero aumenta el valor osea que me muestra al valor de bits de esa funcion no lo que devueve el servidor.


Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #13 (permalink)  
Antiguo 05/03/2003, 21:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Presta mas atención a lo q puse ..

Te decia que despues de cada fput() q tienes ahora que se usa para "enviar dato por el socket abierto" .. hay q usar seguidamente un fget() para leer lo q envia el "socket" tras tu Petición ...

Usa

echo fgets ($fp, 1024)."<br>";

despues de cada fput()

Lo demas .. errores y lo q sea ya es cosa del protocoolo SMTP .. si tienes dudas al respecto, con esos códigos que te dará pasate por el foro "serguridad y redes" y q te orienten mejor .. Pero vamos, el link q te dí mas o menos explica cada uno de los errores o mensajes q se podrían producir ..

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:02.