Foros del Web » Programando para Internet » PHP »

Error envio email desde servidor

Estas en el tema de Error envio email desde servidor en el foro de PHP en Foros del Web. Hola a todos: Tengo un problema con el envio de un email desde el servidor. Tengo un codigo que SI que me envia el mail ...
  #1 (permalink)  
Antiguo 20/04/2005, 12:24
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Error envio email desde servidor

Hola a todos:

Tengo un problema con el envio de un email desde el servidor.
Tengo un codigo que SI que me envia el mail pero una parte del código que debiera generarse dentro de un bucle "for" no se envia

Este es el codigo;

$cuerpo = "<html>\n";
$cuerpo .= "<head> \n";
$cuerpo .= "<title>Comentario</title> \n";
$cuerpo .= "</head> \n";
$cuerpo .="<body topmargin='0' leftmargin='0' rightmargin='0'> \n ";
$cuerpo .= "<div align='center'> \n";
$cuerpo .= "<table width='680' style='border:1px solid #000000;' cellpadding='0' cellspacing='0'> \n";
$cuerpo .="<tr> \n";
$cuerpo .= "<td height='90' bgcolor='#666666'><font color='#FFFFFF' size='4' face='Arial, Helvetica, sans-serif'><strong>Solicitud de Informacion</strong></font></td> \n";
$cuerpo .="</tr> \n";
$cuerpo .="<tr> \n";
$cuerpo .="<td style='padding-left:20; padding-right:20;'> \n";
$cuerpo .="<p><font face='Verdana, Arial, Helvetica, sans-serif' size='2'> \n";
$cuerpo .="Enviado nuevo formulario con los siguientes comentarios: \n";
$cuerpo .="</font></p> \n";
$cuerpo .="<p> \n";
$cuerpo .="<font face='Arial narrow, Arial, Helvetica, sans-serif' size='2'> \n";
$cuerpo .= "<strong>Nombre:</strong> " . $HTTP_POST_VARS["nombre"] . "\n <br>";
$cuerpo .= "<strong>Apellidos:</strong> " . $HTTP_POST_VARS["apellidos"] . "\n <br>";
$cuerpo .= "<strong>Dirección:</strong> " . $HTTP_POST_VARS["direccion"] . "\n <br>";
$cuerpo .= "<strong>Código Postal:</strong> " . $HTTP_POST_VARS["cp"] . "\n <br>";
$cuerpo .= "<strong>Localidad:</strong> " . $HTTP_POST_VARS["localidad"] . "\n <br>";
$cuerpo .= "<strong>Provincia:</strong> " . $HTTP_POST_VARS["provincia"] . "\n <br>";
$cuerpo .= "<strong>Teléfono:</strong> " . $HTTP_POST_VARS["telefono"] . "\n <br>";
$cuerpo .= "<strong>E-mail:</strong> " . $HTTP_POST_VARS["Mail"] . "\n <br>";
$cuerpo .= "</font> \n";
$cuerpo .="</p> \n";


$cuerpo .="<p> \n";
$cuerpo .="<font face='Arial narrow, Arial, Helvetica, sans-serif' size='2'> \n";
$cuerpo .= "<strong>Comentarios:</strong>" . $HTTP_POST_VARS["Observaciones"] . "\n <br>";
$cuerpo .= "</font> \n";
$cuerpo .="</p> \n";

// COMIEZO CARRITO

$suma = 0;
$cuerpo .= "<div align='center'> \n";
$cuerpo .= '<table width=425 border=0 cellpadding="0">
<tr>
<td bgcolor="#666666"><div align="center"><font color="#CCCCCC" size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;Nombre producto</strong></font></div></td>
<td bgcolor="#666666"><font color="#CCCCCC" size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;Precio</strong></font></div></td>
<td bgcolor="#666666" align="center"><font color="#CCCCCC" size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;Acción</strong></font></div></td>
</tr>';
for ($i=0;$i<$this->num_productos;$i++){
if($this->array_id_prod[$i]!=0){
$cuerpo .= '<tr>';
$cuerpo .= "<td class='texto_avance'>" .$this->array_nombre_prod[$i]. "</td>";
$cuerpo .= "<td class='texto_avance' align='center'> " .$this->array_precio_prod[$i]. " €</td>";
$cuerpo .= "<td class='texto_avance' align='center'><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
$cuerpo .= '</tr>';
$suma += $this->array_precio_prod[$i];
}
}
// fila en blanco
$cuerpo .= "<tr><td colspan='3'> &nbsp;</td></tr> \n ";
//muestro el total
$cuerpo .= "<tr><td><b>TOTAL:</b></td><td> <b>$suma €</b></td><td>&nbsp;</td></tr>";
//total más IVA
$cuerpo .= "<tr><td><b>IVA (16%):</b></td><td> <b>" . $suma * 1.16 . "€</b></td><td>&nbsp;</td></tr>";
$cuerpo .= "<tr><td height='50'colspan='3' align='center' valign='bottom'> <a href='carrito2.php'><img src='images/e/comprar.gif' border='0'></a></td></tr> \n ";
$cuerpo .= "</table>";
$cuerpo .= "</div> \n";




// FIN CARRITO


$cuerpo .="</td> \n";
$cuerpo .="</tr> \n";
$cuerpo .="</table> \n";
$cuerpo .="</div> \n";
$cuerpo .="</body> \n";
$cuerpo .="</html> \n";


$destino ="[email protected]";
$asunto = "Comentarios";

// Mando encabezado en html
$encabezado = "MIME-Version: 1.0 \n";
$encabezado .= "Content-type: text/html; charset=iso-8859-1\n";
$encabezado .= "From: Comentarios <[email protected]>\n";
$encabezado .= "X-Mailer:PHP/".phpversion()."\n";

if(mail($destino, $asunto, $cuerpo, $encabezado)){
echo "<p>&nbsp;<p><font size='2' face='Arial'>Gracias por rellenar el formulario. Se ha enviado correctamente.</font>";
echo "<p> \n";
echo "<p> \n";
echo "<p> \n";
echo "<div align='center'> \n";
echo "<a href='javascript:history.go(-1)' class='volver'>&lt;&lt; Volver &gt;&gt; </a>";
echo "</div> \n";
}

Podeis ayudarme????
  #2 (permalink)  
Antiguo 21/04/2005, 01:27
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
2 dias despues sigo sin poder solucionar esto.
La variable $i no recoge ningun valor y por lo tanto no llega al correo.

Ayuda please (por favor)
  #3 (permalink)  
Antiguo 21/04/2005, 01:47
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Cita:
Iniciado por Operadormail
La variable $i no recoge ningun valor y por lo tanto no llega al correo.
La que esta en el for?... No es posible que "no recoja valor" ya que la estás incializando ahí mismo...

Un consejo te doy porque tu amigo "el jam" soy... Cuando manejes bucles, condicinales y cosas por el estilo que "dividan el camino" y tengas problemas con ello... manda a imprimir algo en "lugares estratégicos" para ver por dónde va fluyendo tu código... en qué lugar se quiebra tu aplicación... e identificar tu error. (el consejo va pa' todos, claro).

Por ejemplo, en este caso averígua primero si entra en tu ciclo... poniendo un echo dentro de él, uno quizá dentro de tu if... para ver cuántas veces entra y en qué variantes tiene.. olvidate de enviar el mail por el momento, primero busca tu error.

Bueno, creo es evidente que no entra en tu ciclo... problema? no cumple la condición... entonces enfocate en ello... quizá no te devuelva un valor numérico y no pueda comparar... quizá algo tan simple como que la condición este invertida ó, en casos como este, haya un carácter que te afecte el análisis de dicha condición...

¿haz probado poner algo como for($i=0;$i<($this->num_productos);$i++){??? ... quizá debas cambiar la forma de hacer la asignación... no sé!

Ojala te haya ayudado... La mejor de las suertes!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #4 (permalink)  
Antiguo 21/04/2005, 02:28
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Cambios

Hola de nuevo:

He hecho el siguiente cambio:

He cambiado la funcion imprime_carrito() por $cuerpo.= $_SESSION["ocarrito"]->imprime_carrito(); ya que es una funcion que recibe desde la libreria que crea el objeto carrito.
La funcion está tal como venía antes.
El problema es que ahora si que recoge los datos, pero los imprime en pantalla, y no llegan al email. Los imprime justo encima del "Gracias por rellenar el formulario. Se ha enviado correctamente."

Más ayuda sería muy agradecida
  #5 (permalink)  
Antiguo 21/04/2005, 02:37
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
¿en serio? ... Si te lo imprime tienes un echo por ahí... supongo en tu función que no muestras... de ser así, dicha función no debe imprimir sino regresarte un valor... un return $algo;... es difícil decirlo así.. quizá debas consultar el manual oficial acerca de funciones: www.php.net
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #6 (permalink)  
Antiguo 21/04/2005, 03:00
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Error

No me habia dado cuenta.

Tienes razon "jam" En la funcion habia cambiado los "$cuerpo.=" por "echo" por eso se me imprimia por pantalla, pero al volver a cambiarlos por $cuerpo.= ni se imprimen en pantalla ni llega al mail.

¿?

Gracias por tu colaboración
  #7 (permalink)  
Antiguo 21/04/2005, 03:32
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Esque... necesitas que la función te devuelva un valor... solo te puedo decir eso ya que no aportas los datos de tu función... solo te puedo decir que debe de tener un return $algo... en serio, consulta el manual oficial http://www.php.net/manual/es/functions.php

Otra cosa también podría ser que pongas tu función como simple código más en lo que tienes... solo abrá que tener cuidado colocarlo en el lugar y la cantidad de veces necesario... no veo cómo ni canto la ocupas... lee el manual.

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #8 (permalink)  
Antiguo 21/04/2005, 03:47
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
voy a pegarte la libreria donde figura la función a ver si puedes ayudarme por que ya leí el manual pero estoy MUY perdido.

<?
class carrito {
//atributos de la clase
var $num_productos;
var $array_id_prod;
var $array_nombre_prod;
var $array_precio_prod;

//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
//inicializa el numero de productos a 0
function carrito () {
$this->num_productos=0;
}

//Introduce un producto en el carrito. Recibe los datos del producto
//Se encarga de introducir los datos en los arrays del objeto carrito
//luego aumenta en 1 el numero de productos
function introduce_producto($id_prod,$nombre_prod,$precio_p rod){
$this->array_id_prod[$this->num_productos]=$id_prod;
$this->array_nombre_prod[$this->num_productos]=$nombre_prod;
$this->array_precio_prod[$this->num_productos]=$precio_prod;
$this->num_productos++;
}

//Muestra el contenido del carrito de la compra
//ademas pone los enlaces para eliminar un producto del carrito
function imprime_carrito(){
$suma = 0;
echo "<div align='center'> \n";
echo '<table width=425 border=0 cellpadding="0">
<tr>
<td bgcolor="#666666"><div align="center"><font color="#CCCCCC" size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;Nombre producto</strong></font></div></td>
<td bgcolor="#666666"><font color="#CCCCCC" size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;Precio</strong></font></div></td>
<td bgcolor="#666666" align="center"><font color="#CCCCCC" size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;Acción</strong></font></div></td>
</tr>';
for ($i=0;$i<$this->num_productos;$i++){
if($this->array_id_prod[$i]!=0){
echo '<tr>';
echo "<td class='texto_avance'>" . $this->array_nombre_prod[$i] . "</td>";
echo "<td class='texto_avance' align='center'> " . $this->array_precio_prod[$i] . " €</td>";
echo "<td class='texto_avance' align='center'><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
echo '</tr>';
$suma += $this->array_precio_prod[$i];
}
}
// fila en blanco
echo "<tr><td colspan='3'> &nbsp;</td></tr> \n ";
//muestro el total
echo "<tr><td><b>TOTAL:</b></td><td> <b>$suma €</b></td><td>&nbsp;</td></tr>";
//total más IVA
echo "<tr><td><b>IVA (16%):</b></td><td> <b>" . $suma * 1.16 . "€</b></td><td>&nbsp;</td></tr>";
echo "<tr><td height='50'colspan='3' align='center' valign='bottom'> <a href='carrito2.php'><img src='images/e/comprar.gif' border='0'></a></td></tr> \n ";
echo "</table>";
echo "</div> \n";
}





//elimina un producto del carrito. recibe la linea del carrito que debe eliminar
//no lo elimina realmente, simplemente pone a cero el id, para saber que esta en estado retirado
function elimina_producto($linea){
$this->array_id_prod[$linea]=0;
}
}
//inicio la sesión
session_start();
//si no esta creado el objeto carrito en la sesion, lo creo
if (!isset($_SESSION["ocarrito"])){
$_SESSION["ocarrito"] = new carrito();
}
?>


GRACIAS POR TU PACIENCIA

Última edición por Operadormail; 21/04/2005 a las 04:30
  #9 (permalink)  
Antiguo 21/04/2005, 09:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Vaya .. la misma pregunta de .. de .. a ver si encuentro el mensaje .. por qué no hace mucho hicieron exactamente la misma pregunta basada en la misma classe de "carrito" .. No sé de donde la han sacado .. pero estaría bueno contactar al autor para que incluya la modificación pertinente ..

Lo encontré ...
http://www.forosdelweb.com/f18/envio-datos-sesion-por-mail-288169/

Un saludo,

PD: .. cuando pongan código .. por favor usen el botón "PHP" que sale coloreado el código .. sino se hace complicado seguir y leer código en general ..
  #10 (permalink)  
Antiguo 21/04/2005, 09:28
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Hola cluster

Supongo que mucha gente utilice este codigo ya que es un artículo publicado en www.desarroweb.com


http://www.desarrolloweb.com/articul....php?manual=56

Probaré a ver con tus sugerencias.

Gracias

Última edición por Cluster; 21/04/2005 a las 09:55
  #11 (permalink)  
Antiguo 21/04/2005, 09:38
 
Fecha de Ingreso: junio-2003
Mensajes: 778
Antigüedad: 20 años, 10 meses
Puntos: 1
Cluster:

No solo eres mi ídolo, que digo, mi Dios, sino que estoy dispuesto a hacerte ofrendas.
No me importa cuanto cuesten tus hosting... te los pago... ¿Necesitas dinero? Te lo dejo, ¿Quieres mi casa? Es tuya...

YA ESTA¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡

Duplique la funcion para poder llamarla de las dos maneras y se solucionó. Este es el codigo:
Código PHP:
function imprime_carrito(){
        
$suma 0;
        echo 
"<div align='center'> \n";
        echo 
'<table width=425 border=0 cellpadding="0">
              <tr>
                <td bgcolor="#666666"><div align="center"><font color="#CCCCCC" size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;Nombre producto</strong></font></div></td>
                <td bgcolor="#666666"><font color="#CCCCCC" size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;Precio</strong></font></div></td>
                <td bgcolor="#666666" align="center"><font color="#CCCCCC" size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;Acción</strong></font></div></td>
              </tr>'
;
        for (
$i=0;$i<$this->num_productos;$i++){
            if(
$this->array_id_prod[$i]!=0){
                echo 
'<tr>';
                echo 
"<td class='texto_avance'>" $this->array_nombre_prod[$i] . "</td>";
                echo 
"<td class='texto_avance' align='center'> " $this->array_precio_prod[$i] . " €</td>";
                echo 
"<td class='texto_avance' align='center'><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
                echo 
'</tr>';
                
$suma += $this->array_precio_prod[$i];
            }
        }
        
// fila en blanco
        
echo "<tr><td colspan='3'> &nbsp;</td></tr> \n ";
        
//muestro el total
        
echo "<tr><td><b>TOTAL:</b></td><td> <b>$suma €</b></td><td>&nbsp;</td></tr>";
        
//total más IVA
        
echo "<tr><td><b>IVA (16%):</b></td><td> <b>" $suma 1.16 "€</b></td><td>&nbsp;</td></tr>";
        echo 
"<tr><td height='50'colspan='3' align='center' valign='bottom'> <a href='carrito2.php'><img src='images/e/comprar.gif' border='0'></a></td></tr> \n ";
        echo 
"</table>";
        echo 
"</div> \n";
    }
    
    
    
    
    function 
imprime_carrito2(){
        
$suma2 0;
        
$codigo"<div align='center'> \n";
        
$codigo.= '<table width=425 border=0 cellpadding="0">
              <tr>
                <td bgcolor="#666666"><div align="center"><font color="#CCCCCC" size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;Nombre producto</strong></font></div></td>
                <td bgcolor="#666666"><font color="#CCCCCC" size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;Precio</strong></font></div></td>
                <td bgcolor="#666666" align="center"><font color="#CCCCCC" size="2" face="Arial, Helvetica, sans-serif"><strong>&nbsp;Acción</strong></font></div></td>
              </tr>'
;
        for (
$h=0;$h<$this->num_productos;$h++){
        
$codigo.= "entra";
            if(
$this->array_id_prod[$h]!=0){
                
$codigo.= "entra";
                
$codigo.= '<tr>';
                
$codigo.= "<td class='texto_avance'>" $this->array_nombre_prod[$h] . "producto</td>";
                
$codigo.= "<td class='texto_avance' align='center'> " $this->array_precio_prod[$h] . " €</td>";
                
$codigo.= "<td class='texto_avance' align='center'><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
                
$codigo.= '</tr>';
                
$suma2 += $this->array_precio_prod[$h];
            }
        }
        
// fila en blanco
        
$codigo.= "<tr><td colspan='3'> &nbsp;</td></tr> \n ";
        
//muestro el total
        
$codigo.="<tr><td><b>TOTAL:</b></td><td> <b>$suma2 €</b></td><td>&nbsp;</td></tr>";
        
//total más IVA
        
$codigo.="<tr><td><b>IVA (16%):</b></td><td> <b>" $suma2 1.16 "€</b></td><td>&nbsp;</td></tr>";
        
$codigo.= "<tr><td height='50'colspan='3' align='center' valign='bottom'> <a href='carrito2.php'><img src='images/e/comprar.gif' border='0'></a></td></tr> \n ";
        
$codigo.= "</table>";
        
$codigo.= "</div> \n";
        
        return 
$codigo;
    }


despues solamente hay que concatenar la llamada a la función:

$cuerpo.= $_SESSION["ocarrito"]->imprime_carrito2(); 
Gracias Dios... digo Cluster

Última edición por Cluster; 21/04/2005 a las 10:02
  #12 (permalink)  
Antiguo 21/04/2005, 09:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
jajajaja .. sobre el "dinero" .. por ahí tengo una cuenta en PayPal que podría habilitarla para "donaciones" jejejejejee.

Bueno . .fuera bromas .. deberían UDs. los usuarios de ese tutorial hacer el comentario al creador (tiene un apartado de comentarios ..) con que lo "likeen" aquí sobraría .. com para que lo tenga encuenta. Personalmente eso de ir haciendo "echo" en un método de una classe no lo veo muy bien .. de hecho plantea los problemas que tu y más personas en tu situación han tenido ..

Un saludo,

PD: edité tus mensajes para colorear el código (que quede más claro) y un problema con el link que dejastes anterior...
  #13 (permalink)  
Antiguo 21/04/2005, 10:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. ya puse mi comentario en ese tutorial .. No les puse el llink a este (y otro mensaje de este foro que trató el tema) para que no me vengan con el cuento de hacer "spam" .. sólo hice el comentario para que se dé por aludido el autor de dicho tutorial.


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 21:53.