Foros del Web » Programando para Internet » PHP »

Ayuda con PHP para enviar adjuntos.

Estas en el tema de Ayuda con PHP para enviar adjuntos. en el foro de PHP en Foros del Web. Hola a todos, tengo un problema y ya no sé que más probar. Tengo un formulario en PHP (contacto.php). Son algunos datos y quiero que ...
  #1 (permalink)  
Antiguo 12/06/2009, 07:59
 
Fecha de Ingreso: agosto-2008
Mensajes: 14
Antigüedad: 15 años, 8 meses
Puntos: 0
Ayuda con PHP para enviar adjuntos.

Hola a todos, tengo un problema y ya no sé que más probar.
Tengo un formulario en PHP (contacto.php). Son algunos datos y quiero que los navegantes puedan enviar un archivo adjunto. Este PHP, al darle a enviar, llama al archivo envio.php que es el que lo envía mediante PHPMailer. Los datos llegan bien, pero no logro que me envíe el archivo. Les dejo como están prgramados a ver si me pueden ayudar:

contacto.php:
<form action="envio.php" method="post" enctype="multipart/form-data">

<label>Nombre;
<input name="nombre" type="text" id="nombre" size="45" />
</label>
<p>
<label>Email;
<input name="email" type="text" id="email" size="45" />
</label>
</p>
<p>
<label>Teléfono
<input name="telefono" type="text" id="telefono" size="20" maxlength="9" />
</label>
</p>

<p>Observaciones:</p>
<p>
<textarea name="Observaciones" cols="60" rows="5" id="Observaciones"></textarea>
</p>

<p>Fichero:<br />
<input name="fichero_adjunto" type="file" id="fichero_adjunto" size="30" />
</p>


<p>
<label></label>
<input type="submit" value="Enviar" />
</p>
</form>


Envio.php
<?
// primero hay que incluir la clase phpmailer para poder instanciar
//un objeto de la misma
require "includes/class.phpmailer.php";

//instanciamos un objeto de la clase phpmailer al que llamamos
//por ejemplo mail
$mail = new phpmailer();

//Definimos las propiedades y llamamos a los métodos
//correspondientes del objeto mail

//Con PluginDir le indicamos a la clase phpmailer donde se
//encuentra la clase smtp que como he comentado al principio de
//este ejemplo va a estar en el subdirectorio includes
$mail->PluginDir = "includes/";

//Con la propiedad Mailer le indicamos que vamos a usar un
//servidor smtp
$mail->Mailer = "smtp";

//Asignamos a Host el nombre de nuestro servidor smtp
$mail->Host = "smtp.strato.com";

//Le indicamos que el servidor smtp requiere autenticación
$mail->SMTPAuth = true;

//Le decimos cual es nuestro nombre de usuario y password
$mail->Username = "xxxxxxxxxxxxxxxxx";
$mail->Password = "*******";

//Indicamos cual es nuestra dirección de correo y el nombre que
//queremos que vea el usuario que lee nuestro correo
$mail->From = "xxxxxxxxxxxxxxxxxxxxxxx";
$mail->FromName = "Formulario Web";

//el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar
//una cuenta gratuita, por tanto lo pongo a 30
$mail->Timeout=120;

//Indicamos cual es la dirección de destino del correo
$mail->AddAddress("xxxxxxxxxxxxxxx");

//Asignamos asunto y cuerpo del mensaje
//El cuerpo del mensaje lo ponemos en formato html, haciendo
//que se vea en negrita
$mail->Subject = "Contacto desde la Web";
$mail->Body = "Nombre: " . $_POST["nombre"] . "\n";
$mail->Body .= "<br>Email: " . $_POST["email"] . "\n";
$mail->Body .= "<br>Telefono: " . $_POST["telefono"] . "\n";
$mail->Body .= "<br>Socio: " . $_POST["socio"] . "\n";
$mail->Body .= "<br>Comentarios: " . $_POST["Observaciones"] . "\n";

//Indicamos el fichero a adjuntar si el usuario seleccionó uno en el formulario
$mail->AddAttachment($archivo_adjunto, $archivo);




//Definimos AltBody por si el destinatario del correo no admite email con formato html
$mail->AltBody = "Mensaje de prueba mandado con phpmailer en formato solo texto";

//se envia el mensaje, si no ha habido problemas
//la variable $exito tendra el valor true
$exito = $mail->Send();

//Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho
//para intentar enviar el mensaje, cada intento se hara 5 segundos despues
//del anterior, para ello se usa la funcion sleep
$intentos=1;
while((!$exito)&&($intentos<5)&&($mail->ErrorInfo!="SMTP Error: Data not accepted")){
sleep(5);
//echo $mail->ErrorInfo;
$exito = $mail->Send();
$intentos=$intentos+1;
}

//La clase phpmailer tiene un pequeño bug y es que cuando envia un mail con
//attachment la variable ErrorInfo adquiere el valor Data not accepted, dicho
//valor no debe confundirnos ya que el mensaje ha sido enviado correctamente
if ($mail->ErrorInfo=="SMTP Error: Data not accepted") {
$exito=true;
}

if(!$exito)
{
echo "Problemas enviando correo electrónico a ".$valor;
echo "<br/>".$mail->ErrorInfo;
}
else
{
//Mostramos un mensaje indicando las direccion de
//destino y fichero adjunto enviado en el mensaje
$mensaje="<p>Has enviado un mensaje a:<br/>";
$mensaje.=$valor." ";
if ($archivo !="none") {
$mensaje.="Con un fichero adjunto llamado ".$archivo_name;
}
$mensaje.="</p>";
echo $mensaje;
}
echo "<a href='contacto.php'> VOLVER AL FORMULARIO</a>";


?>
  #2 (permalink)  
Antiguo 12/06/2009, 08:09
 
Fecha de Ingreso: diciembre-2007
Mensajes: 218
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Ayuda con PHP para enviar adjuntos.

Saludos,

Yo lo tengo de esta manera y funciona OK

$varname = $_FILES['archivo']['name'];
$vartemp = $_FILES['archivo']['tmp_name'];
$mail = new PHPMailer();
$mail->Mailer="smtp";
$mail->Helo = "www.xxx.xxx";
$mail->SMTPAuth = true;
$mail->Host ='localhost';
$mail->Port =25;
$mail->Username ='xxx@xxx';
$mail->Password ='xxx';
$mail->From = "xxx@xxx";
$mail->FromName = "XXX";
$mail->Timeout=60;
$mail->IsHTML(true);
$mail->AddAddress("[email protected]");
$mail->AddReplyTo("[email protected]","XXXXX");
//$mail->WordWrap = 50;
$mail->Subject = $_POST['asunto'];
$mail->AddAttachment($vartemp, $varname);
$body = "Mensaje Enviado desde el <strong>Web XXX</strong> por <strong>".$_POST['usr']."</strong> con el email <strong>".$_POST['usr_mail'].$varname."</strong><br><br>".$_POST['mensaje']."<br>";
$mail->Body = $body;
$mail->AltBody=$body;
$mail->Send()


Cualquier cosa preguntas.
  #3 (permalink)  
Antiguo 12/06/2009, 08:13
Avatar de martin0341  
Fecha de Ingreso: septiembre-2006
Ubicación: Rosario - Santa Fe
Mensajes: 296
Antigüedad: 17 años, 7 meses
Puntos: 8
Respuesta: Ayuda con PHP para enviar adjuntos.

donde esta $_FILES[fichero_adjunto]????
  #4 (permalink)  
Antiguo 06/07/2009, 05:50
 
Fecha de Ingreso: agosto-2008
Mensajes: 14
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Ayuda con PHP para enviar adjuntos.

Gracias!!, lo he modificado y ahora funciona!! Por fín!
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 23:02.