Problemas al enviar datos por email desde php

hola, quiero enviar por mail unos datos desde el php y no se donde estoy fallando....
probé varios formas, y no las pongo por no saturar la web....
estoy probando el código desde WampServer 2 instalado en mi equipo,
esta dentro de la carpeta donde siempre pongo las webs que voy haciendo para probarlas
y nunca tengo ningún problema, lo comento por si sirve de algo.....
gracias
el código html es:
<html>
<head>
<title>
</title>
</head>
<body>
<form action="enviomail.php" method="post">
Dato 1=
<input type="text" name="dato1" id="id_dato1">
<br>
Dato 2=
<input type="text" name="dato2" id="id_dato2">
<br>
Dato 3=
<input type="text" name="dato3" id="id_dato3">
<br>
<br>
<input type="submit" value="Enviar">
</form>
</body>
</html>
y su php donde se encuentra el problema es:
<HTML>
<HEAD>
<TITLE>
</TITLE>
</HEAD>
<body>
<?PHP
$phpdato1=$_POST['dato1'];
$phpdato2=$_POST['dato2'];
$phpdato3=$_POST['dato3'];
$palabra = "abcdef";
$email_destino="[email protected]";
$email_destino2="[email protected]";
$asunto="Prueba de envío";
$cuerpo_mensaje="Datos del formulario:\n".
"Dato 1=$phpdato1\n".
"Dato 2=$phpdato2\n".
"Dato 3=$phpdato3\n".
"palabra=$palabra\n";
echo"
<HTML>
<HEAD>
<TITLE>
</TITLE>
</HEAD>
<body>
palabra=$palabra
<br>
dato 1= $phpdato1
<br>
dato 2= $phpdato2
<br>
dato 3= $phpdato3
<br>
Dirección de E-Mail= $email_destino
<br>
Dirección de E-Mail 2= $email_destino2
<br>
Asunto= $asunto
<br>
Cuerpo del mensaje= $cuerpo_mensaje
</body>
</html>";
mail($email_destino, $asunto, $cuerpo_mensaje);
mail($email_destino2, $asunto, $cuerpo_mensaje);
?>
¿como lo puedo solucionar?
gracias

1 Respuesta

Respuesta
1

Primero de todo, veo muchas repeticiones en tu código:

Creo que así esta más limpio y no tiene ilógica (llamas dos veces a lo mismo).

¿
<?PHP
$phpdato1=$_POST['dato1'];
$phpdato2=$_POST['dato2'];
$phpdato3=$_POST['dato3'];
$palabra = "abcdef";
$email_destino="[email protected]";
$email_destino2="[email protected]";
$asunto="Prueba de envío";
$cuerpo_mensaje=
"
<HTML><HEAD><TITLE>".$asunto."</TITLE></HEAD>
<body>
palabra=".$palabra."
<br>
dato 1= ".$phpdato1."
<br>
dato 2= ".$phpdato2."
<br>
dato 3= ".$phpdato3."
</body></html>";
mail($email_destino, $asunto, $cuerpo_mensaje);
mail($email_destino2, $asunto, $cuerpo_mensaje);
?>

Aun así, yo uso este formato y me funciona perfectamente.

He adaptado tu código a mi formato.

<?
$phpdato1=$_POST['dato1'];
$phpdato2=$_POST['dato2'];
$phpdato3=$_POST['dato3'];
$palabra = "abcdef";
$email_destino="[email protected]";
$email_destino2="[email protected]";
$asunto="Prueba de envío";
$cabeceras = "MIME-Version: 1.0" . "\r\n";
$cabeceras .= "Content-type: text/html; charset=utf-8" . "\r\n";
$cabeceras .= "From: MI MAIL <".$email_destino.">" . "\r\n" . "Reply-To: ".$email_destino2."" . "\r\n";
$mensaje = "
<html>
<head>
 <title>Envio desde web</title>
</head>
<body>
<div>
palabra=".$palabra."<br>
dato 1= ".$phpdato1."<br>
dato 2= ".$phpdato2."<br>
dato 3= ".$phpdato3."
</div>
</body>
</html>";
if (mail($para,utf8_decode($asunto),$mensaje,$cabeceras)){
 ?><script type="text/javascript">alert("Su mensaje se ha enviado correctamente.");</script><?
 }else{
 ?><script type="text/javascript">alert("Se ha producido un error durante el envio.");</script><?
}
?>

hola $para ¿donde se define?

if (mail($para,utf8_decode($asunto),$mensaje,$cabeceras).......

gracias

otra cosa, básicamente no funciona, no se que estaré haciendo mal, yo copie exactamente lo que has colgado, solo cambie las direcciones de los email, y el mensaje que da es "se ha producido un error", con lo cual, funciona, pero no funciona.....

gracias

Perdona no contestarte antes, estaba de viaje.

Se me olvido el $para

Básicamente es al mail donde se va a enviar. Cambia el $para por $email_destino

Este proceso no suele funcionar en local, a mi por lo menos con Xammp y Appserv no me tira, pero luego en cualquier hosting me funciona sin problemas.

Prueba con ese mini cambio y me cuentas.

gracias, funciona perfectamente, lo intentare insertar en la web, por eso no finalizo, por si me ocurriera algo

gracias

por curiosidad, el código interno de html en mi php que coge esta entre echo"..... tu lo pones entre $mensaje = "...... ¿que diferencia hay?

yo lo intente y me da error.....

este seria en muy resumidas cuentas el php que utilizo, (quite tablas y demás entorno visual) el otro era mas resumido.....

no se como insertar tu código, y algo que se supone debe ocurrir es que no se mande el email asta que no se de al botón ok

espero explicarme y que me puedas ayudar

gracias

<?PHP
$phpdato1=$_POST['dato1'];
$phpdato2=$_POST['dato2'];
$phpdato3=$_POST['dato3'];
$palabra = "abcdef";
$email_destino="[email protected]";
$asunto="Pago por TPV Virtual";
$cabeceras = "MIME-Version: 1.0" . "\r\n";
$cabeceras .= "Content-type: text/html; charset=utf-8" . "\r\n";
$cabeceras .= "From: TELECTRISA <".$email_destino.">" . "\r\n";
echo "
<html>
<head>
<title></title>
<script language=JavaScript>
function calc() {
vent=window.open('http://www.google.com/');
document.forms[0].submit();}
</script>
</head>
<body>
<form name=compra action=$url method=post target=_blank>
Datos:
<br>
Dato 1:
$phpdato1
<br>
Dato 2:
$phpdato2
<br>
Dato 3:
$phpdato3
<br>
Palabra:
$palabra
<br>
<a href='index.html'><img src='img/b_volver.png' width='94' height='31'/><a href='javascript:calc()'><img src='img/b_ok.png' width='94' height='31' />
<input type=hidden name='otro dato'='123456'>
</form>
</body></html>
";
?>

La diferencia entre $mensaje = y el echo, es que con el echo lo estas imprimiendo, no poniéndolo como una variable que se enviara..

Basándome en tu código, lo haría así.

¿
<?
if (isset($_POST["Enviado"])){
 $phpdato1=$_POST['dato1'];
 $phpdato2=$_POST['dato2'];
 $phpdato3=$_POST['dato3'];
 $palabra = "abcdef";
 $email_destino="[email protected]";
 $email_destino2="[email protected]";
 $asunto="Prueba de envío";
 $cabeceras = "MIME-Version: 1.0" . "\r\n";
 $cabeceras .= "Content-type: text/html; charset=utf-8" . "\r\n";
 $cabeceras .= "From: MI MAIL <".$email_destino.">" . "\r\n" . "Reply-To: ".$email_destino2."" . "\r\n";
 $mensaje = "
 <html>
 <head>
 <title>Envio desde web</title>
 </head>
 <body>
 <div>
 palabra=".$palabra."<br>
 dato 1= ".$phpdato1."<br>
 dato 2= ".$phpdato2."<br>
 dato 3= ".$phpdato3."
 </div>
 </body>
 </html>";
 if (mail($para,utf8_decode($asunto),$mensaje,$cabeceras)){
 ?><script type="text/javascript">alert("Su mensaje se ha enviado correctamente.");</script><?
 }else{
 ?><script type="text/javascript">alert("Se ha producido un error durante el envio.");</script><?
 }
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>MIWEB</title>
</head>
<body>
<script type="text/javascript">
 function enviarFormulario(){
 dato1 = document.formulario.dato1.value;
 dato2 = document.formulario.dato2.value;
 dato3 = document.formulario.dato3.value;
 if (dato1 == "" || dato2 == "" || dato3 == "")
 alert("Por favor, rellene todos los campos y vuelva a enviar el formulario. Muchas gracias."); 
 else
 document.formulario.submit();
 }
</script>
<form action="formulario.php" method="post" id="formulario" name="formulario">
 <div class="f_n_f_izq">
 <input type="hidden" name="Enviado" value="ok" />
 <input type="text" name="dato1" ><br>
 <input type="text" name="dato2"><br>
 <input type="text" name="dato3">
 <a href="javascript:enviarFormulario();">ENVIAR</a>
</form>
</body>
</html>

Como ves, en el formulario le paso una variable oculta "Enviado".

En el php le digo que solo haga el proceso de envío si "Enviado" no esta vacío.

Te puse el código javascript para que te avise si los campos están vacíos.

Se me volvió a colar el $para. Revísalo como te mencione anteriormente.

perdona mi torpeza, intente insertar tu código en el mio, pero tampoco consigo nada....

el tullo funciona perfectamente, gracias, ahora bien, lo quiero insertar en el código que colgué antes del php, este código tiene una parte de html, y dentro de el se ejecuta este código:

<a href='index.html'><img src='img/b_volver.png' width='94' height='31'/><a href='javascript:calc()'><img src='img/b_ok.png' width='94' height='31' />
<input type=hidden name='otro dato'='123456'>

al pulsar sobre este botón ok es cuando se debe mandar el mail, pero al insertarlo en el php no responde y no se que hago mal.....

ups, te pongo el código que utilice, el php da error (yo lo veo lógico, pero no se como corregirlo)

gracias

html:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>
</title>
</head>
<body>
<script type="text/javascript">
function enviarFormulario(){
dato1 = document.formulario.dato1.value;
dato2 = document.formulario.dato2.value;
dato3 = document.formulario.dato3.value;
if (dato1 == "" || dato2 == "" || dato3 == "")
alert("Por favor, rellene todos los campos y vuelva a enviar el formulario. Muchas gracias.");
else
document.formulario.submit();
}
</script>
<form action="enviomail.php" method="post"id="formulario" name="formulario">
<div class="f_n_f_izq">
<input type="hidden" name="Enviado" value="ok" />
Dato 1=
<input type="text" name="dato1" id="id_dato1">
<br>
Dato 2=
<input type="text" name="dato2" id="id_dato2">
<br>
Dato 3=
<input type="text" name="dato3" id="id_dato3">
<br>
<br>
<a href="javascript:enviarFormulario();">ENVIAR</a>
</form>
</body>
</html>

php:

<?PHP
$phpdato1=$_POST['dato1'];
$phpdato2=$_POST['dato2'];
$phpdato3=$_POST['dato3'];
$palabra = "abcdef";
$email_destino="[email protected]";
$asunto="Pago";
$cabeceras = "MIME-Version: 1.0" . "\r\n";
$cabeceras .= "Content-type: text/html; charset=utf-8" . "\r\n";
$cabeceras .= "From: yo <".$email_destino.">" . "\r\n";
$mensaje = "
<html>
<head>
<title>Envío desde web</title>
</head>
<body>
<div>
palabra=".$palabra."<br>
dato 1= ".$phpdato1."<br>
dato 2= ".$phpdato2."<br>
dato 3= ".$phpdato3."
</div>
</body>
</html>";
echo "
<html>
<head>
<title></title>
<script language=JavaScript>
function calc() {
vent=window.open('http://www.google.com/');
document.forms[0].submit();
if (mail($email_destino,utf8_decode($asunto),$mensaje,$cabeceras)){
?><script type="text/javascript">alert("Su mensaje se ha enviado correctamente.");</script><?
}else{
?><script type="text/javascript">alert("Se ha producido un error durante el envío.");</script><?
}
}
}
</script>
</head>
<body>
<form name=compra action=$url method=post target=_blank>
Datos:
<br>
Dato 1:
$phpdato1
<br>
Dato 2:
$phpdato2
<br>
Dato 3:
$phpdato3
<br>
Palabra:
$palabra
<br>
<a href='index.html'><img src='img/b_volver.png' width='94' height='31'/><a href='javascript:calc()'><img src='img/b_ok.png' width='94' height='31' />
<input type=hidden name='otro dato'='123456'>
</form>
</body></html>
";
?>

La verdad es que marcas unos argumentos rarísimos.

Por lo que veo en tu código, en el propio mail quieres imprimir un formulario, ¿correcto?

Lo digo porque esta parte de tu código no la entiendo para nada.

Echo "
<html>
<head>
<title></title>
<script language=JavaScript>
function calc() {
vent=window.open('http://www.google.com/');
document.forms[0].submit();
if (mail($email_destino,utf8_decode($asunto),$mensaje,$cabeceras)){
?><script type="text/javascript">alert("Su mensaje se ha enviado correctamente.");</script><?
}else{
?><script type="text/javascript">alert("Se ha producido un error durante el envío.");</script><?
}
}
}
</script>
</head>
<body>
<form name=compra action=$url method=post target=_blank>
Datos:
<br>
Dato 1:
$phpdato1
<br>
Dato 2:
$phpdato2
<br>
Dato 3:
$phpdato3
<br>
Palabra:
$palabra
<br>
<a href='index.html'><img src='img/b_volver.png' width='94' height='31'/><a href='javascript:calc()'><img src='img/b_ok.png' width='94' height='31' />
<input type=hidden name='otro dato'='123456'>
</form>
</body></html>

Intenta explicarme que quieres que pase. Que salga un formulario y que al darle a enviar salga otro, o el que.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas