ARGENTOP2P

Soporte, Ayuda y Consultas => Programación en General => Mensaje publicado por: cazador en Marzo 28, 2007, 13:08:13

Título: Problema con php mail
Publicado por: cazador en Marzo 28, 2007, 13:08:13
Buenas changos, otra ves por aca pidiendo ayuuuuuuuda!!!

El tema es asi, en los ultimos dias a la fuerza cambie de hosting mi foro http://argentronicap2p.awardspace.com/smf/index.php y desde entonces lo nuevos que se registraban no recibian la confirmacion, probe mandandome un mailing pero tampoco me llego, intente cambiarlo a smtp, pero tampoco anduvo.

Alguien podria tirarme una punta de que es lo que puedo hacer para solucionar el tema, ya vi la comunidad de SMF, pero no caso un fulbo de lo que hablan.

gracias (dax , predi, telefono) jajaja  :palmas:
Título: Re: Problema con php mail
Publicado por: elrosti en Marzo 28, 2007, 15:02:59
Cazador, fijate que si mal no recuerdo la función de mail de PHP puede estar deshabilitada, si es así no hay vuelta salvo que puedas pedirle a los de tu servidor que la habiliten.

Saludos.
Título: Re: Problema con php mail
Publicado por: cazador en Marzo 28, 2007, 15:16:54
y si esta activada?? no hay solucion??   :(
Título: Re: Problema con php mail
Publicado por: elrosti en Marzo 28, 2007, 15:28:18
podes probár si la función de PHP funciona subiendo una pagina php con el siguiente codigo


<?
$from = "From:you@yourdomain.com";
$to = "you@yourdomain.com";
$subject = "Hi! ";
$body = "TEST";

if(mail($to,$subject,$body,$from)) echo "MAIL - OK";
else echo "MAIL FAILED";
?>


modifica los datos obvios en ese script y si no te llega un mail queire decir que hay problemas con dicha función.

Pero me parece que tu gran problema es que en el hosting gratuito no tenes habilitado el SMTP :S

Saludos.
Título: Re: Problema con php mail
Publicado por: cazador en Marzo 28, 2007, 15:39:47
no tiene habilitado el smtp, por eso lo puse en php

hice esa prueba y me aparece mail faild estoy en el horno, no rosti?
Título: Re: Problema con php mail
Publicado por: elrosti en Marzo 28, 2007, 15:56:48
Cita de: cazador en Marzo 28, 2007, 15:39:47
no tiene habilitado el smtp, por eso lo puse en php

hice esa prueba y me aparece mail faild estoy en el horno, no rosti?

Esperemos que vengan los que saben de verdad  :P, pero me parece que sí  :-\.

Saludos.
Título: Re: Problema con php mail
Publicado por: cazador en Marzo 28, 2007, 16:03:00
o sea que aparentemente tengo algo de mail php, porque encontre esta info del server

Sendmail path     /usr/sbin/sendmail
sendmail_from   php@mail1.awardspace.com
SMTP   localhost
smtp_port   25

Título: Re: Problema con php mail
Publicado por: Predicador en Marzo 29, 2007, 02:50:35
Hola,
Es bastante normal en los hostings gratuitos que deshabiliten funciones de mail para evitar a los spamers.
Tambien puede ser que depende de como quien firmas (es el campo FROM) el mail (para evitar spoofing); pero creo que mayormente estas frito.
Baii
Título: Re: Problema con php mail
Publicado por: cazador en Marzo 29, 2007, 10:30:22
gracias predi, buuuu, tuve que poner el registro automatico, o sea sin activacion, y que sea lo que dios quiera

saludos, manden candado y borren  :up:
Título: Re: Problema con php mail
Publicado por: Predicador en Marzo 29, 2007, 10:39:49
caza, activa el CAPTCHA asi no se te registran spambots!
Baii
Título: Re: Problema con php mail
Publicado por: cazador en Marzo 29, 2007, 10:56:58
y como o desde donde lo activo?? ni J de esto
Título: Re: Problema con php mail
Publicado por: 4kstore en Marzo 29, 2007, 17:58:33
el captcha es la confirmacion visual !!! tambien te recomiendo qeu busques en el foro de smf cosas para evitar bots sino estas de nuevo frito como escuche por ahi. y intenta de ponerte enc ontacto con el del server y pedir que te habiliten el smtp.

suerte.!
Título: Re: Problema con php mail
Publicado por: cazador en Marzo 30, 2007, 09:46:50
el tema es que si kiero el smtp activo, hay que pagar, esa es la cagada. vere que hago  :up:
Título: Re: Problema con php mail
Publicado por: Camello_AR en Marzo 31, 2007, 10:55:18
Haceme acordar la semana que viene (porque tengo que busca por ahi) que yo hice una clase para mandar mail directo al SMTP (necesitas tener uno). O sea creas un objeto mail, le agregas from, recipientes, subject, cuerpo y la opción enviar se conecta via SOCK al smtp y manda el mail de acuerdo a las respuestas que recibe. Lo hice hace unos años y fue un interesante ejercicio de programación
Título: Re: Problema con php mail
Publicado por: cazador en Marzo 31, 2007, 11:17:00
gracias came, espero a la semana que viene, o cuando puedas, no hay drama  :up:
Título: Re: Problema con php mail
Publicado por: Camello_AR en Marzo 31, 2007, 11:18:47
El tema es que hoy viajo y no vuelvo a la Internet hasta el miercoles, así que tengo que buscar primero si esta en un CD o que y despues pasarlo aca
Título: Re: Problema con php mail
Publicado por: cazador en Marzo 31, 2007, 11:24:57
todo bien came, cuando puedas, de verdad, no hay drama, espero, si hasta ahora anduvo todo ok, unos dias mas puede esperar.
otra ves gracias  :up:
Título: Re: Problema con php mail
Publicado por: 4kstore en Abril 01, 2007, 19:14:54
interesante lo tuyo cam !!! yo tmb quiero probar eso (Y)!
Título: Re: Problema con php mail
Publicado por: Camello_AR en Abril 05, 2007, 00:47:50
Para los que lo pidieron aca va

(aviso modifique la parte de copyrigth poruqe tiene mi nombre personal y un mail viejo)

<?php
/*
* Class smtp_sender 
*
* (c) Camello_AR <camello.ar@gmail.com>
* Una simple clase con motor SMTP propio (una alternativa para el comando mail)
*
* Uso:
* $smtp = new smtp_sender;
* $smtp->from[name] = nombre del sender (si vacio = direccion)
* $smtp->from[dir] = direccion del sender
* $smtp->smtp_add_rcpt(dir, name, type) = a quien se envia el correo (type = 0-to, 1-cc, 2-bcc)
* $smtp->reply_to[dir][name] = direccion y nombre de respuesta (si estan vacios los toma del from)
* $smtp->server = servidor en forma IP (sino poner = gethostbyname("nombre servidor")
* $smtp->helo = nombre del host que ejecuta esta apliación
* $smtp->asunto = Asunto del Mensaje
* $smtp->body = cuerpo del mensaje (debe ser final)
* $smtp->smtp_send();
*
* TODO:
* - Mejorar el sistema de errores (estoy en eso) para armar arrays de errores 
* - Agregar un codificador para el body_gen() asi se pueden agregar archivos attach
*   Se puede usar como base la parte relativa al decodificador en la parte visor de mails
*/

Class Smtp_Sender {

    var 
$helo;
    var 
$server;
    var 
$from;
    var 
$rcpt;
    var 
$asunto;
    var 
$mail//smtp_body_gen()
    
var $body;
    var 
$socket;
    var 
$reply_to;
    var 
$rec_tot ;
    var 
$error 0;
    var 
$errores;

//$rcpt = [name] [dir] (si name vacio = dir)
//$from = [name] [dir] (si name vacio = dir)
//$reply_to = [name] [dir] (si dir vacia=$from si name vacio = dir)

/*
  Conectar Al Servidor SMTP y enviar el Mensaje
*/

    
function smtp_send() {
        
$this->errores[totales] = 0;
        
$this->socket socket_create(AF_INETSOCK_STREAMgetprotobyname("TCP"));
        if (!
$this->socket) {
            echo 
"No se abrio el socket por: ".socket_strerror($this->socket)."<br>\n";
        } else {
            
$conexion socket_connect($this->socket$this->server25);
            
$this->smtp_body_gen();
            
// var_dump($this->rcpt);
            
$this->smtp_comando("""220""No se consiguio realizar conexión con el servidor {this->server}");
            
$this->smtp_comando("HELO {$this->helo}\n""250""No se reconocio la sentencia {$this->helo} como bienvenida");
            
$this->smtp_comando("MAIL FROM: {$this->from[dir]}\n""250""El remitente ".$this->from[dir]." no fue reconocido");
            
$totales $this->rec_tot;
            for (
$i 0$i<$totales$i++) {
                
$this->smtp_comando("RCPT TO: ".$this->rcpt[dir][$i]."\n""250""El recipiente ".$this->rcpt[dir][$i]." no fue reconocido"1$i);
            }
            
$this->smtp_comando("DATA\n""354""No se puede escribir el cuerpo, no hay recipientes");
            
$this->smtp_comando("{$this->mail}\n""data""No esta listo para aceptar el correo");
            
$this->smtp_comando("\r\n.\r\n""250""");
            
$this->smtp_comando("QUIT\n""data""No se termino el cuerpo del correo");
            
socket_close($this->socket);
         }
    }

/* 
  Funcion smtp_comando
  Lee las respuestas del servidor y escribe la información despues
*/

    
function smtp_comando($buffer$cod$action$tipo 0$orden 0) {
        if (!
$this->socket) {
            echo 
"Se perdio la conexión con el servidor {$this->server}";
        } else {
            if (
$this->error == 0) {
                
//echo $buffer;
                
socket_write($this->socket$bufferstrlen($buffer));
                if (
$cod!="data") {
                    
$buf socket_read($this->socket128);
                    
//$this->rcpt[error][$orden] = "0";
                    
if (substr($buf,0,3)!=$cod) {
                        
$this->errores[totales] = $this->errores[totales] +1;
                        
$errnum $this->errores[totales];
                        
$this->errores[$errnum] = $action;
                        
//echo $action;
                        
if ($tipo == 0) {
                            
$this->error 1;
                        } else {
                            
$this->rcpt[error][$orden] = "1";
                        }
                    }
                }
            }
        }
    }

/* 
  Funcion smtp_body_gen
  Genera el Cuerpo del Mensaje con el subject, el x-origen-ip, el from, el to, etc
*/

    
function smtp_body_gen() {
        if (!
$this->from[name]) {
            
$this->from[name] = $this->from[dir];
        }
        if (!
$this->reply_to[dir]) {
            
$this->reply_to[dir] = $this->from[dir];
        }
        if (!
$this->reply_to[name]) {
            
$this->reply_to[name] = $this->from[name];
        }
        
$h_from "{$this->from[name]} <{$this->from[dir]}>";
        
$totales $this->rec_tot;
for ($i 0$i<$totales$i++) {
            if (
$this->rcpt[type][$i]==0) {
                
$dire $this->rcpt[dir][$i];
                
$nam $this->rcpt[name][$i];
                
$h_to .= $nam." <".$dire.">, ";
            } else if (
$this->rcpt[type][$i]==1) {
                
$dire $this->rcpt[dir][$i];
                
$nam $this->rcpt[name][$i];
                
$h_cc .= $nam." <".$dire.">, ";
            }
        }
        
$h_to substr($h_to0strlen($h_to)-2);
        
$h_cc substr($h_cc0strlen($h_cc)-2);
        
$h_reply_to "{$this->reply_to[name]} <{$this->reply_to[dir]}>";
        
$x_ip "X-Origen-IP: ".getenv("REMOTE_ADDR");
        
$x_ver phpversion();
        
$x_mail "X-Mailer: mailto:web - PHP/$x_ver"
        
$header "From: $h_from\r\nReply-To: $h_reply_to\r\n$x_mail\r\n$x_ip\r\nTo: $h_to\r\nCC: $h_cc\r\nSubject: {$this->asunto}\r\n\r\n";
        
$this->mail $header.$this->body;
    }

    function 
end() {
        
socket_close($this->socket);
    }

    function 
smtp_add_rcpt($dir$name$type) {
        
$ya_hay $this->rec_tot;
if (!$name) {$name $dir;}
        
$this->rcpt[dir][$ya_hay]  = $dir;
        
$this->rcpt[name][$ya_hay] = $name;
        
$this->rcpt[type][$ya_hay] = $type;
        
$this->rec_tot += 1;
    }

}
?>



EDIT: Este es un archivo que incorpore en una proyecto de webmail llamado "mailto:web" que nunca vio la luz (engo varios proyectos en PHP como uno que se llama DeliveryNet que es una especie de portal de compras de un comercio delivery (una pizzeria por ejemplo) que imprime los tiquet de pedido en la impresora del comercio. Para mi muchos de esos son escuelas porque es una manera de aprender a manejar los comandos e integrarlos en situaciones reales. (webmail, pedidos con impresión, uso de temas y graficos, etc)
Título: Re: Problema con php mail
Publicado por: Camello_AR en Abril 05, 2007, 00:59:54
NOTAS:
1)
en * $smtp->body = cuerpo del mensaje (debe ser final)

Final significa no lo ultimo que se carga, sino que debe ser el texto codificado, formateado o como sea (dado que no recibe postproceso salvo las cabeceras)

2) Copiar el texto pegarlo en un archivo de texto y renombralo a .php (darle el nombre que quieran, el original es "smtp.php") y luego incluirlo en el archivo que llame a la clase (o si tienen un framework o archivo que llama las funciones y eso se puede agregar ahi) con el comando
include("smtp.php");

ACLARACION: Doble post para que estas notas no se pierdan
Título: Re: Problema con php mail
Publicado por: Camello_AR en Abril 05, 2007, 01:05:57
EJEMPLO DE USO

Este es un archivo que recibe los datos de un formulario, si manejan un poco de PHP y HTML enseguida se daran cuenta de la extructura

header.php, ss.txt y barra.php son archivos que hacen a la visualización de la page (un poco lo que hablaba de un framework)

<?
include("header.txt");
include("smtp.php");
$page = "sendmail";
require_once("barra.php");
//
$cc = explode(", ", $HTTP_POST_VARS["ccopy"]);
$to = explode(", ", $HTTP_POST_VARS["to"]);
$de = $HTTP_POST_VARS["from"];
$smtp = new Smtp_Sender;
$smtp->from[dir] = $de;
$smtp->from[name] = ucfirst($usr);
if ($HTTP_POST_VARS[to]!="") {
for ($i=0 ; $i<count($to); $i++) {
$smtp->smtp_add_rcpt($to[$i], $to[$i], 0);
}
}
if ($HTTP_POST_VARS[ccopy]!="") {
for ($i=0 ; $i<count($cc); $i++) {
$smtp->smtp_add_rcpt($cc[$i], $HTTP_POST_VARS[$i], 1);
}
}
$smtp->server = "127.0.0.1";
$smtp->helo = getenv("SERVER_NAME");
$smtp->asunto = $HTTP_POST_VARS["subject"];
$smtp->body = $HTTP_POST_VARS["msg"];
$totales = $smtp->rec_tot;
for ($i = 0; $i<$totales; $i++) {
    $para .= $smtp->rcpt[dir][$i].", ";
}
$para = substr($para, 0, strlen($para)-2);
$smtp->smtp_send();
/*
$ip = getenv("REMOTE_ADDR");
$de = $HTTP_POST_VARS[from];
$para  = $HTTP_POST_VARS[to];
$motivo  = $HTTP_POST_VARS[subject];
$mensaje  = $HTTP_POST_VARS[msg];
$cc = $HTTP_POST_VARS[ccopy];
if (!$cc) {
$cch = "";
} else {
$para = $para.",".$cc;
$cch = "\nCC: ".$cc;
}
$cabecera = "From: ".$de."\nReply-To: ".$de.$cch."\nX-Mailer: mailto:web - PHP/" . phpversion()."\nX-Origen-IP: ".$ip;
mail($para, $motivo, $mensaje, $cabecera);
*/
?>
<font face=Verdana>
<h1>Envio de Correo Electronico de **SITIO**.Com.Ar</h1>
<p><small>
<?
if ($smtp->error == 1) {
    echo "Error enviando el mensaje<br>";
    $tot = $smtp->errores[totales];
    if ($tot >= 1) {
        for ($n = 1; $n <= $tot; $n++) {
            echo "<i>".$smtp->errores[$n]."</i><br>";
        }
    }
}
for ($i = 0; $i<$totales; $i++) {
    $para = $smtp->rcpt[dir][$i];
    if ($smtp->rcpt[error][$i] == 1) {
        echo "No se pudo enviar el mensaje a <b><i>".$para."</b></i><BR>";
        if ($smtp->error == 0) {
            $tot = $smtp->errores[totales];
            if ($tot >= 1) {
                for ($n = 1; $n <= $tot; $n++) {
                    echo "<i>".$smtp->errores[$n]."</i><br>";
                }
            }
        }
    } else {
        echo "Se envio el mensaje a <b><i>".$para."</b></i> correctamente<BR>";
    }
}
?>
</small></p>

<?
echo $barran;
include("ss.txt");
?>
</font>
Título: Re: Problema con php mail
Publicado por: elrosti en Abril 05, 2007, 09:27:40
Muy bueno Camello !!!.

PD: che.... ¿ vos no eras abogado ?  :jaja:  :jaja:, porque tenes mas pinta de programador que de abogado...
Título: Re: Problema con php mail
Publicado por: Camello_AR en Abril 05, 2007, 09:31:00
Es que antes de ser abogado soy informatico. De hecho estuve 2 años intentando estudiar ing. en sistemas, y por suerte compatibilizo los dos gustos

EDIT: Me gustaría que prueben la clase y me avisen como les anda
Título: Re: Problema con php mail
Publicado por: cazador en Abril 05, 2007, 09:32:04
gracias camellin, en cuanto pueda la mando al foro mio

salutes
Título: Re: Problema con php mail
Publicado por: Camello_AR en Abril 05, 2007, 09:38:03
POr nada caza
Título: Re: Problema con php mail
Publicado por: cazador en Abril 05, 2007, 15:54:22
en sintesis, ara redondear,y lo tuyo came, kede de primera, yo tengo el foro SMF, del cual no puedo mandar mails ni via PHP ni via SMTP.
Lo que vos pones es para que arme un archivo nuevo, que modifique uno existente, de ser nuevo, tendria que modificar alguno existente o no? ni idea de esto de la programacion. me lo podes explicar un poquitin mas camellin.
mil gracias  :up:
Título: Re: Problema con php mail
Publicado por: elrosti en Abril 05, 2007, 17:33:52
Cazador: creo que para tus necesidades deberias modificar a mano SMF ( lo cual luego lleva problemas y laburo en mantenimiento, pero eso ya es otro tema).

En cada lugar que SMF intenta mandar un mail ( ejemplo al momento de pedir la confirmación para el registro) deberias modificar el codigo y remplazar la llamada a la función por la función de Camello.

Todo eso suponiendo que lo que te estan restringiendo es el acceso al SMTP configurado en PHP. Para estar seguro te acnosejo subir un pequeño ejemplo atu servidor y tratar de usarlo.

Aunque, Cazador, Con todo respeto, con tus conocimientos de programación dudo mucho que puedas meterle mano a SMF para hacer todas las modificaciones necesarias.

Saludos.
Título: Re: Problema con php mail
Publicado por: cazador en Abril 05, 2007, 17:35:16
gracias rosti por la sinceridad  :jaja:
Título: Re: Problema con php mail
Publicado por: elrosti en Abril 05, 2007, 17:47:50
Cita de: cazador en Abril 05, 2007, 17:35:16
gracias rosti por la sinceridad  :jaja:
:up:

Tengo ese defecto  ::)



Título: Re: Problema con php mail
Publicado por: cazador en Abril 05, 2007, 18:17:14
por otro lado, camellin, que me podra decir al respecto??
Título: Re: Problema con php mail
Publicado por: Camello_AR en Abril 05, 2007, 19:12:02
Ejem, lo que podes hacer una funcione que pasandole los parametros reemplaze a la función mail de PHP (y luego reemplazar en todos los archivos las llamadas a esa función por la nueva (podría llamarse mail2())

Entonces la función tomaria la siguiente estructura

function mail2($de, $para, $servidor = DIR SMTP, $encabezado, $asunto, $cuerpo) {

$smtp = new smtp_sender;
$smtp->from[dir] = $de;
$smtp->smtp_add_rcpt($para, $para, 0);
$smtp->reply_to[dir] = $de;
$smtp->reply_to[name] = "Argentronica";
$smtp->server = gethostbyname($servidor);
$smtp->helo = "SMF via SMTP Class by Camello_AR";
$smtp->asunto = $asunto;
$smtp->body = $cuerpo;
$smtp->smtp_send();
}
Título: Re: Problema con php mail
Publicado por: elrosti en Abril 05, 2007, 22:59:41
Excelente idea camello, no se me habia ocurrido.

caza, capas que el lunes puedo ayudarte a implementar la idea de camello.

saludos.
Título: Re: Problema con php mail
Publicado por: Camello_AR en Abril 05, 2007, 23:13:03
lo unico hay que evaluar los parametros de una y otra función
Título: Re: Problema con php mail
Publicado por: cazador en Abril 06, 2007, 16:06:30
ok, esero al lunes, para ver como meter todo esto en el foro. saludos y otra ves gracias  :up:
Título: Re: Problema con php mail
Publicado por: cazador en Mayo 19, 2007, 12:30:12
rosti o came. sigo con el problema, si me pueden tirar un salbavidas, les estare eternamente agradecido
Título: Re: Problema con php mail
Publicado por: elrosti en Mayo 19, 2007, 19:32:11
buscame el lunes en el canal y vemos como puedo ayudarte.

saludos.
Título: Re: Problema con php mail
Publicado por: cazador en Mayo 20, 2007, 08:52:18
ok  10,4 recibido  ;)
Título: Re: Problema con php mail
Publicado por: gaston_andre en Noviembre 15, 2007, 21:44:58
hice un curso de dreamweaver y estoy medio perdido en unas cosas y como "vendi" una paginita a la ke tengo ke hacerle un formulario de contacto (aclaro ke me lei 20 millones de paginas y tutos de formularios y cada uno me mareo mas ke otro) 1) aparte de la pagina html tengo ke tener otra con un codigo llamada mail.php o algo asi? un server ke contrate me dice Ruta interna del Sendmail: /usr/bin/sendmail 2)como hago para ke me aparezca la leyenda mail enviado? 3)hay diferencia si el server es con windows o linux? ME ESTOY VOLVIENDO LOCO, en este post vi varios codigos pero no entendi bien donde ponerlos, si en mi html o en el .php
Título: Re: Problema con php mail
Publicado por: Predicador en Noviembre 17, 2007, 10:53:42
Gasto, este post no es el mas adecuado para tu consulta, ya que tratan de problemas un tantito diferentes, pero date una leida por http://www.argentop2p.net/index.php?topic=8134.0 que ahi esta tu solucion.
Baii