entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Enviar variables jquery por mail

Buenos dias necesitaria una mano en enviar variables jquery por mail, el codigo que tengo es:

<script type="text/javascript">

  $(function () {
    var goToCartIcon = function($addTocartBtn){
    var $cartIcon = $(".my-cart-icon");
    var $image = $('<img width="30px" height="30px" src="' + $addTocartBtn.data("image") + '">').css({"position": "fixed", "z-index": "999"});
    $addTocartBtn.prepend($image);
    var position = $cartIcon.position();
    $image.animate({
      top: position.top,
      right: position.right
    }, 500 , "linear", function() {
      $image.remove();
    });
  }

  $('.my-cart-btn').myCart({
    classCartIcon: 'my-cart-icon',
    classCartBadge: 'my-cart-badge',
    affixCartIcon: true,
    checkoutCart: function(products, totalPrice, totalQuantity) {
        var checkoutString = "Total Price: " + totalPrice + "\nTotal Quantity: " + totalQuantity;
        checkoutString += "\n\n Codigo \t Producto \t Precio \t Cantidad";
        $.each(products, function(){
          checkoutString += ("\n " + this.id + " \t " + this.name +  + " \t " + this.price + " \t " + this.quantity);
        });
        alert(checkoutString)
        console.log("checking out", products, totalPrice, totalQuantity);
      },
    clickOnAddToCart: function($addTocart){
      goToCartIcon($addTocart);
    },
    getDiscountPrice: function(products) {
      var total = 0;
      $.each(products, function(){
        total = this.quantity * this.price;
      });
      return total;
    }
  });

});
  </script>

las variables que tengo que enviar son products, totalPrice, totalQuantity, si pudieran darme una mano se lo agradeceria!

1 Respuesta

1voto

Leonardo-Tadei Puntos227320

Hola @matti,

en esta otra pregunta tuya, que es igual a esta, tratamos el tema de por qué no es posible que nada que tengas en una variable JavaScript puede ser enviado por mail, porque JavaScript ejecutándose en el navegador, no puede enviar un e-mail.

También en esa respuesta están los mecanismos para hacerlo.

Si tu pregunta es cómo enviar datos a un script en el servidor por GET, por POST o asíncrónicamente por AJAX, o si es cómo recibir el valor para enviar un mail, o cualquier otra cosa, por facor, preguntá esa otra cosa!

Saludos cordiales

0voto

matti comentado

Ya pude enviar los datos por ajax correctamente, monte un servidor SMPT con mercury de XAMPP y tengo el problema que no me llega el mail, te dejo el codigo aver si encontras el problema.

<?php
    session_start();
    $headers = "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
    //dirección del remitente 
    $headers .= "From: Macrofer Paseo Ferretero S.A. < [email protected] >\r\n";
    //Enviamos el mensaje a tu_dirección_email 
    $producto=$_GET['productos'];
    $destinatario=$_SESSION['email'];
    $copia1="[email protected]";
    $total=$_GET['total'];
    $cantotal=$_GET['cantidad'];
    $fecha=date("d/m/y");
    $hora=date("H:i:s");
    $nombre=$_SESSION['nombre'];
    //Estoy recibiendo el formulario, compongo el cuerpo
    $cuerpo = "<h1>Nuevo pedido</h1>";
    $count = count($producto);
    $i=0;
    while($i<$count){
    $cuerpo .= "<table border='1'>
<tr><td colspan='2'> Pedido de $nombre</td></tr>
<tr><td> FECHA </td><td> $fecha </td></tr>
<tr><td> HORA </td><td> $hora </td></tr>
<tr><td> ID </td><td> $producto[$i]['id']; </td></tr>
<tr><td> Producto </td><td> $producto[$i]['name']; </td></tr>
<tr><td> Cantidad </td><td> $producto[$i]['quantity'] </td></tr>
<tr><td> Total </td><td> $total </td></tr>
    </table>,";}
    $cuerpo .= "<p>Tu email: " . $destinatario . "</p>";

    //mando el correo...
    $book=mail($destinatario,$cuerpo,$headers);
    if($book){
    echo "Mensaje enviado";
}else{
    echo "Mensaje no enviado";
}
    ?>

1voto

Leonardo-Tadei comentado

Hola @matti,

pero esto es código PHP! Tu pregunta es cómo enviar variables JQuery por e-mail! Es desconcertante...

Respecto a que el e-mail no te llega, es por el funcionamiento intrínsico del correo electrónico: para que un mail sea aceptado hace falta que el servidor tenga un registro MX en el DNS de la IP originante. Esto significa que los mails que envíes desde tu PC serán descartados por los servidores de correo en general.

Para probar esto, enviate el mail a una cuenta de propio equipo, así testeás el envío.

Luego probalo en el servidor que aloja al sitio, que sí tiene un servidor SMTP, para ver si podés hacer un envío directo o si tenés alguna restricción de autentificación que cumplir.

Tu código luce bien. Lo que está mal es tu infraestructura para probar que funcione.

Mandale saludos a Roberto de mi parte!
Saludos cordiales.

0voto

matti comentado

Probé cambiando lavariable cuerpo por un hola y funcionó se mando el mail pero con La variable cuerpo bo funciona porque puede ser esto, y a que roberto? De mantenimiento de La empresa?

0voto

Leonardo-Tadei comentado

Si un "hola" te funciona, tal vez sea que no estás entrando nunca al bucle, y están mandando un e-mail vacío. Revisá la forma en que te llega y usás $_GET['productos']...

Por qué mandarías el nombre del cliente y la fecha de nuevo a cada producto, en vez de enviarla una sola vez?

Saludos cordiales

PD: me refería a Roberto Rodriguez, el padre de la familia propietaria de la empresa.

0voto

matti comentado

Los productos me los trae bien el $_get, el problema es que no se envían los mail cuando pongo el cuerpo como variable en el mail

0voto

Leonardo-Tadei comentado

hacé un var_dump($_GET['productos']); y copianos la salida que obtengas acá, así vemos qué es lo que te llega.

O no te está llegando un vector, o lo estás recorriendo mal...

0voto

matti comentado

Estuve probando subiendolo al host, y por lo que vi en los logs me tira un error de allow memory size of 734003200 bytes exhausted en la linea 29! no se porque puede ser eso?
Lo solucione poniendo ini_set("memory_limit", "1024M"); en el archivo mail.php pero nunca aparece el echo de mensaje enviado ni mensaje no enviado!

0voto

Leonardo-Tadei comentado

Le va a dar a un script php permiso para usar 1GB de RAM??? Estás despedido! ;-)

El error que obtenés es por exceso de uso de recursos, posiblemente por un bucle infinito. Yo sin ver la salida del var_dump() que te pido más arriba, no puedo seguir adelante... por qué no la copiaste y pegaste acá cómo te pido?

Todo sigue apuntando a que el problema está en dónde sospecho originalmente...

0voto

matti comentado

Hice el var_dump pero parece que nunca llega a ejecutarlo porque no me mostró nada pero tampoco tiro error, dónde decís que está el problema?

0voto

Leonardo-Tadei comentado

Si hacés un var_dump() afuera del WHILE y no se ve nada, tenés un error más grave de lo que creés...

Decís que no ves errores, pero tenés configurado PHP para que te muestre los errores? Tenés el php.ini con los valores para desarrollo? Si no los tenés, no verás nunca ningún error...

Me falta info para saber a dónde está el problema, pero supongo que tu script nunca entra al WHILE.

0voto

matti comentado

Si lo tengo habilitado, las variables con el Ajax las revise en consola y se envían bien lo que no se es porque nunca entra al archivo PHP para ejecutarlo, me falta algún código o algo está mal en mí código?

0voto

Leonardo-Tadei comentado

@matti, me confunde tu relato de lo que pasa: al principio decís que si en vez de armar la variable con el contenido enviás "hola" el mail sí se envía, para lo cual el archivo PHP tiene que ejecutarse. Más adelante decís que obtenés un error de memoria insuficiente, para lo que el archivo PHP también tiene que ejecutarse.

Ahora decís que el archivo PHP nunca llega a ejecutarse.

Yo sigo sin saber si no se ejecuta nada o solo no entra en el WHILE. Tampoco nos envías un var_dump() para ve el contenido de las variables. Sin más información coherente y precisa, yo no puedo avanzar más :-(

0voto

matti comentado

Es así el archivo se ejecuta correctamente es decir se envía el mail si ingreso web localhost/mail.php pero si intento con el botón no funciona, el problema está que en cuanto mandó La información vía Ajax solo aparece el cartel de funciono que se muestra al enviar exitosamente La información vía Ajax ahora para mí no ejecuta nunca el archivo PHP porque no aparece ningún cartel de mensaje enviado o mensaje no enviado, disculpa soy medio malo para explicar las cosas, no sé si se entiendo mejor ahora

0voto

Leonardo-Tadei comentado

En el código que tenés en esta pregunta, en ningún momento aparece la parte JS que envía los datos a mail.php.

Según lo que decís ahora, tu problema no es que el mail no se envía, sino que no estás haciendo la llamada a mail.php

Llegados a este punto, es irrelevante lo que haga mail.php, porque el problema es que nunca se lo llama, así que poner en el título de la pregunta que el problema es mandar un mail, al menos a mi, resulta muy confuso, porque estamos mirando para un lado cuando el problema está en otro.

Llegados a este punto @matti y después de este larguísimo intercambio, creo que tenés que lo mejor sería que cierres esta pregunta y arranques de nuevo preguntando cómo llamar con ajax a un script PHP? e indicar en el texto que le querés pasar unos valores, o en caso de que el llamado sea directo y que al enviar el pedido se recargue la página, preguntar cómo llamar desde JavaScript a un script PHP?

Fijate que son dos escenarios distintos, y la pregunta y la respuesta varía según de qué forma lo necesites (que hasta ahora no conocemos exactamente)

Saludos cordiales

0voto

matti comentado

 var data={ productos: products, 
                   total: totalPrice,
                   cantidad: totalQuantity};

        $.ajax({
    data : data,
    url: "mail.php",
    type: 'POST',
    success: function() {
        alert('Funciona');
         //window.location="mail.php";
    },
    error: function() {
        alert( "Ha ocurrido un error" );
    }
    });

Esa es la parte que envio por metodo post de ajax las variable a el archivo mail.php.
Decime si eso te sirve para darme una mano o abro otra pregunta directamente. Saludos

0voto

Leonardo-Tadei comentado

Bien, esta es la parte en dónde envías por el método POST a mail.php... y cómo podemos saber de dónde salen los valores que van en data ? Los alert() se ven?

Con el largo que tiene ya todo esto, te será mejor empezarlo de nuevo. Partí de una pregunta que tenga sentido (la que inicia esto no lo tiene) y poné el código relevante para que se pueda ver de dónde salen los valores, qué contenido tienen las variables y por dónde ves que pasa tu código (por ejemplo, todavía no sabemos si te aparece el alert() del success, el del error o ninguno.

Nosotros no podemos saber nada más que lo que nos digas! No asumas que sabemos cosas de tu código cuando no lo ponés para que lo veamos! Por ejemplo, en ningún lugar aparece la parte del código que llama a la última porción de JS que pusiste, así que con esto ni siquiera sabemos si alguien intenta ejecutarlo.

Saludos cordiales

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta