Foros del Web » Programando para Internet » PHP »

Dudas con phpmailer

Estas en el tema de Dudas con phpmailer en el foro de PHP en Foros del Web. Suponiendo que tengo Código: <form method="post" action="" name='form' enctype="multipart/form-data"> <input type="file" name="archivo" size="20"> </form usando el phpmailer tengo dudas para adjuntar el archivo, No deseo ...
  #1 (permalink)  
Antiguo 20/12/2005, 17:35
 
Fecha de Ingreso: abril-2005
Ubicación: Piura - Perú
Mensajes: 189
Antigüedad: 19 años
Puntos: 0
Pregunta Dudas con phpmailer

Suponiendo que tengo
Código:
<form  method="post" action="" name='form' enctype="multipart/form-data">
<input type="file" name="archivo" size="20">
</form
usando el phpmailer tengo dudas para adjuntar el archivo, No deseo subirlo al servidor lo unico es que se adjunte y se envie. Eh estado leyendo los demas temas en el foro, pero aun no salgo de dudas y no adjunta el archivo.
Código:
	   	if (isset ($_FILES["archivos"])) {
			$msg .= "<ul>";
			foreach ($_FILES["archivos"]["error"] as $key => $error) {
				if ($error == UPLOAD_ERR_OK) {
					$tmp_name = $_FILES["archivos"]["tmp_name"][$key];
					$name = $_FILES["archivos"]["name"][$key];
					$msg .= "<li>$name</li>";
					$name = uniqid('bc') . '_' . $name; # Generar un nombre único para el archivo
					$mail -> AddAttachment ($tmp_name, $name);
					/*
					Si se van a guardar los archivos en un directorio, deberían descomentarse
					las siguientes líneas, si se van a guardar los nombres 
					de los archivos en una base de datos, aquí debería realizarse algo...					
				   	
					move_uploaded_file($tmp_name, "ruta/directorio/$name"); # Guardar el archivo en una ubicación, debe tener los permisos necesarios
					*/
				} #if
	   		} # foreach
			$msg .= '</ul>';
		} # if
		if (!$mail -> Send ()){
			$msg = "No se pudo enviar el email";
		}
Siempre veo el uso del foreach pero solo es un campo tipo file llamado archivo, y no lo adjunta envia el resto del mail pero el archivo adjunta no aparece.. Entiendo que la variable de envio con el class de phpmailer es $mail -> AddAttachment ($tmp_name, $name); hace esto porque si el archivo tiene espacios los convierte a un nuevo name y lo adjunta, pero no lo adjunta! nose donde estaria mi error. ó ejemplizar en simple form con su codigo de phpmailer para enviar un solo archivo, Gracias de ante mano!
  #2 (permalink)  
Antiguo 20/12/2005, 18:39
Avatar de Tx
Tx
 
Fecha de Ingreso: enero-2002
Ubicación: Cba - Arg
Mensajes: 188
Antigüedad: 22 años, 3 meses
Puntos: 1
Hola...
el bucle foreach te sirve para el caso de enviar varios archivos o ir recorriendo los valores de los campos, en este caso, si quieres enviar un solo archivo, seria mas o menos asi o por lo menos lo haria asi:

Código PHP:
//---- si eligio un archivo-------
if($_FILES['archivo']['name'] != ''){
        
//------- si se subio el archivo al servidor -------
        
if(is_uploaded_file($_FILES['archivo']['tmp_name'])){
                
//------- agregar el archivo al mail --------
                
$mail->AddAttachment ($tmp_name$name);
        }
}
//----- enviar el mensaje ------
if(!$mail->Send()){
        
$msg "El mensaje no pudo ser enviado.";
}
//******* resto de codigo ******** 
si le falta un par de cosas, por ejemplo te tendria que incluir el archivo temporal, con nombre y extension que tiene en ese momento, nose como lo estas haciendo, ni que tipo de archivos son, por eso no puse nada mas, tendrias que detectar el tipo mime del archivo y nombrarlo segun corresponda.

en el caso que pusiste, no lo puede atachar porque, segun me parece, esta refernciando a un archivo que no existe "$_FILES["archivos"]["tmp_name"][$key]" y "$_FILES["archivos"]["name"][$key]", pero si es solo un archivo, eso seria lo basico.

Puede que no te funcione, porque nose el nombre de las variables, pero la logica seria algo asi.

Saludos y cualquier cosa avisa..
suerte...
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 16:31.