Foros del Web » Programando para Internet » PHP »

Duda en AddAttachment

Estas en el tema de Duda en AddAttachment en el foro de PHP en Foros del Web. Hola por fin he conseguido configurar bien mi phpmailer, era un problema del smtp que intentaba usar. Ahora se envian los mensajes correctamente. Mi duda ...
  #1 (permalink)  
Antiguo 03/06/2008, 02:04
Avatar de PedroRodas  
Fecha de Ingreso: noviembre-2005
Ubicación: Cádiz
Mensajes: 393
Antigüedad: 18 años, 4 meses
Puntos: 0
Duda en AddAttachment

Hola por fin he conseguido configurar bien mi phpmailer, era un problema del smtp que intentaba usar.

Ahora se envian los mensajes correctamente. Mi duda ahora está en el "AddAttachment". Si coloco una ruta relativa desde el script php funciona correctamente. Pero el archivo que ira vendra dado por el "name" de un input type="file" de un formulario. Entonces he intentado hacer esto:

campo de formulario:
Código HTML:
<p align="center">Archivo<input name="archivo" type="file" id="archivo"></p> 
AddAttachment:
Código PHP:
$archivo$_POST['archivo'];
$mail->AddAttachment($archivo); 
Alguna sugerencia, estoy muy cerca!!!! mil gracias.
__________________
Genial concierto de Roger Waters, Pink Floyd siguen vivos!!!
  #2 (permalink)  
Antiguo 03/06/2008, 03:24
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 6 meses
Puntos: 19
Respuesta: Duda en AddAttachment

Para acceder a un input-file tienes que utilizar el array $_FILES, no el $_POST.

Un saludo
  #3 (permalink)  
Antiguo 03/06/2008, 03:43
Avatar de PedroRodas  
Fecha de Ingreso: noviembre-2005
Ubicación: Cádiz
Mensajes: 393
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Duda en AddAttachment

vamos a ver, este es mi codigo, no entiendo lo que pasa aqui:

Código PHP:
<html>
  <head>
    <title>Prueba</title>
  </head>
  <body>
 <?php
 
if (isset($_POST['texto'])) {
 require(
"includes/class.phpmailer.php");
 
$mail = new PHPMailer();
 
 
$mail->PluginDir "includes/"
 
 
$mail->Mailer "smtp";
 
 
$mail->Host "smtp.labolsaolavida.com";
 
 
$mail->SMTPAuth true;
 
$mail->Username "mi_usuario"
 
$mail->Password "mi_password";
 
 
$archivo$_POST['archivo'];
 
$texto $_POST['texto'];

 
$mail->Body "<b>esto es un mensaje de prueba. Muestro el valor de texto: <b>"$texto"</b><br />";

 
$body $mail->Body;
 
 
$mail->AltBody "esto es un mensaje de prueba";
 
 
$mail->AddAttachment($archivo);
 
 
$mail->From "[email protected]";
 
$mail->FromName "Pedro";
 
$mail->Subject "Contacto desde el sitio web";
 
 
$mail->AddAddress("[email protected]");

 
$mail->Timeout=120;
 
$exito $mail->Send();
 
 if(!
$exito) {
 echo 
"<p class='aviso'>El mensaje no ha podido ser enviado, por favor inténtalo de nuevo.</p>";
 } 
 else {
 echo 
"<p class='aviso>¡Mensaje enviado correctamente!</p>";
 }
 }
 else
 {
?>
<form action="validar_phpmailer.php" method="post" name="form1" enctype="multipart/form-data">
  <p align="center">Texto<input name="texto" type="text" id="texto"></p>
  <p align="center">Archivo<input name="archivo" type="file" id="archivo"></p>
  <p align="center"><input name="boton" type="submit" id="boton" value="Enviar"></p>
</form>
<?
}
?>
  </body>
</html>
Vamos a ver:
1.-si pongo la ruta directamente en el AddAttachment, todo va bien (tanto absoluta como relativa).
2.Intento asignar $archivo= $_POST['archivo']; y luego poner $archivo en el AddAttachment pero entonces ya no manda el archivo adjunto.Con esta configuracion me dice esto:
Código:
Notice: Undefined index: archivo in c:\archivos de programa\easyphp1-8\www\validar_phpmailer.php on line 21
3.- Si le quito el enctype="multipart/form-data" al formulario me quita el NOTICE anterior.

Yo de verdad que me pierdo.

Ayuda!!! muchas gracias
__________________
Genial concierto de Roger Waters, Pink Floyd siguen vivos!!!
  #4 (permalink)  
Antiguo 03/06/2008, 03:48
Avatar de PedroRodas  
Fecha de Ingreso: noviembre-2005
Ubicación: Cádiz
Mensajes: 393
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Duda en AddAttachment

cambio el $archivo= $_POST['archivo'] por $archivo= $_FILES['archivo']; y me da este NOTICE:
Notice: Array to string conversion in c:\archivos de programa\easyphp1-8\www\includes\class.phpmailer.php on line 1157.

Como podeis ver no hay tantas lineas en mi codigo
__________________
Genial concierto de Roger Waters, Pink Floyd siguen vivos!!!
  #5 (permalink)  
Antiguo 03/06/2008, 03:58
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 10 meses
Puntos: 5
Respuesta: Duda en AddAttachment

El problema que la variable archivo tiene una ruta relativa a un archivo situado en el ordenador del cliente. Primero hay que subir ese archivo al servidor.

Código PHP:
$archivo"ruta_de_tu_servidor_donde_se_guardara_el_archivo_subido_por_un_cliente";

if(!
move_uploaded_file($_FILES["archivo"]["tmp_name"], $archivo))
{
//ERROR, NO SE PUEDE SUBIR EL ARCHIVO AL SERVIDOR
}
else
{
$mail->AddAttachment($archivo);

Prueba esto.
Pero te recomiendo que leas algo mas sobre la variable $_FILES y como subir archivos. Ya que deberias tener algun "comprobador" funcion que compruebe el archivo para ver si es un archivo limpio o por el contrario es un archivo malintencionado. Si no tienes ese comprobador, te pueden subir archivos dañinos al servidor (como un .htacces, o algun tipo exploit o algo parecido..).
  #6 (permalink)  
Antiguo 03/06/2008, 04:15
Avatar de PedroRodas  
Fecha de Ingreso: noviembre-2005
Ubicación: Cádiz
Mensajes: 393
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Duda en AddAttachment

Lo he conseguido!!Lo consegui antes de leer elmensaje de tokkara por lo que no he usado su recomendacion. Es mejor que la mia? donde puedo informarme sobre el comprobador de archivos? Muchas gracias por tu respuesta.

Código PHP:
<html>
  <head>
    <title>Prueba</title>
  </head>
  <body>
 <?php
 
if (isset($_FILES['archivo'])) {
 require(
"includes/class.phpmailer.php");
 
$mail = new PHPMailer();
 
 
$mail->PluginDir "includes/"
 
 
$mail->Mailer "smtp";
 
 
$mail->Host "smtp.labolsaolavida.com";
 
 
$mail->SMTPAuth true;
 
$mail->Username "labolsao01"
 
$mail->Password "xxxxx";
 
 
$tmp_name $_FILES['archivo']['tmp_name'];
 
$name $_FILES['archivo']['name'];
 
$texto $_POST['texto'];

 
$mail->Body "<b>esto es un mensaje de prueba. Muestro el valor de texto: <b>"$texto"</b><br />";

 
$body $mail->Body;
 
 
$mail->AltBody "esto es un mensaje de prueba";
 
 
$mail->AddAttachment($tmp_name$name);
      
 
//$mail->MsgHTML($body);
 
 
$mail->From "[email protected]";
 
$mail->FromName "Pedro";
 
$mail->Subject "Contacto desde el sitio web";
 
 
$mail->AddAddress("[email protected]");

 
$mail->Timeout=120;
 
$exito $mail->Send();
 
 if(!
$exito) {
 echo 
"<p class='aviso'>El mensaje no ha podido ser enviado, por favor inténtalo de nuevo.</p>";
 } 
 else {
 echo 
"<p class='aviso>¡Mensaje enviado correctamente!</p>";
 }
 }
 else
 {
?>
<form action="validar_phpmailer.php" method="post" name="form1" enctype="multipart/form-data">
  <p align="center">Texto<input name="texto" type="text" id="texto"></p>
  <p align="center">Archivo<input name="archivo" type="file" id="archivo"></p>
  <p align="center"><input name="boton" type="submit" id="boton" value="Enviar"></p>
</form>
<?
}
?>
  </body>
</html>
__________________
Genial concierto de Roger Waters, Pink Floyd siguen vivos!!!
  #7 (permalink)  
Antiguo 03/06/2008, 08:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Duda en AddAttachment

Hola PedroRodas,

Es correcto hacer lo que planteas, ya que no es necesario copiarlo a una carpeta, puedes usar perfectamente el archivo temporal.

Saludos,
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 22:35.