Foros del Web » Programando para Internet » PHP »

Enviar mail con correo adjunto usando la funcion mail()

Estas en el tema de Enviar mail con correo adjunto usando la funcion mail() en el foro de PHP en Foros del Web. hola Tengo un codigo que me envia un mail a la cuenta que le indico pero me adjunta mal el fichero porque? No tengo inconveniente ...
  #1 (permalink)  
Antiguo 11/11/2007, 11:16
 
Fecha de Ingreso: julio-2006
Ubicación: sevilla
Mensajes: 251
Antigüedad: 17 años, 9 meses
Puntos: 5
Enviar mail con correo adjunto usando la funcion mail()

hola

Tengo un codigo que me envia un mail a la cuenta que le indico pero me adjunta mal el fichero porque?

No tengo inconveniente en modificar o poner otro script si alguien tiene alguno que marche y envie correos con fichero adjuntos con mucho gusto lo cambio.


Código PHP:
<?
$UN_SALTO
="\r\n";
$DOS_SALTOS="\r\n\r\n";

$destinatario="[email protected]";
$titulo="Mensaje con un fichero adjunto";
$mensaje="<html><head></head><body bgcolor=\"#0000ff\">";
$mensaje .="<font face=\"Arial\" size=6>Prueba HTML </font>";
$mensaje .="</body></html>";
$responder="[email protected]";
$remite="[email protected]";
$remitente="Juan el del molin te envia un ficherín";

$separador md5 (uniqid (rand())); 
  
$cabecera "Date: ".date("l j F Y, G:i").$UN_SALTO
$cabecera .= "MIME-Version: 1.0".$UN_SALTO
$cabecera .= "From: ".$remitente."<".$remite.">".$UN_SALTO;
$cabecera .= "Return-path: "$remite.$UN_SALTO;
$cabecera .= "Reply-To: ".$remite.$UN_SALTO;
$cabecera .="X-Mailer: PHP/"phpversion().$UN_SALTO;
$cabecera .= "Content-Type: multipart/mixed;".$UN_SALTO
$cabecera .= " boundary=$separador".$DOS_SALTOS

// Parte primera -Mensaje en formato HTML 
      # Separador inicial
$texto =$UN_SALTO
      
# Encabezado parcial
$texto .="Content-Type: text/html; charset=\"ISO-8859-15\"".$UN_SALTO
$texto .="Content-Transfer-Encoding: 7bit".$DOS_SALTOS
      
# Contenido de esta parte del mensaje
  
$texto .= $mensaje;
 
      
# Separador de partes

$adj1 $UN_SALTO.$UN_SALTO

// Parte segunda -Fichero adjunto nº 1 

      # Encabezado parcial

$adj1 .="Content-Type: Aplicacion/pdf; name=\"doc_word.pdf\"".$UN_SALTO;  
$adj1 .="Content-Disposition: inline; filename=\"doc_word.pdf\"".$UN_SALTO;
$adj1 .="Content-Transfer-Encoding: base64".$DOS_SALTOS

      
# lectura  del fichero adjunto  
      
$fp fopen("doc_word.pdf""r"); 
           
$buff fread($fpfilesize("doc_word.pdf")); 
       
fclose($fp); 
      
# codificación del fichero adjunto  
$adj1 .=chunk_split(base64_encode($buff)); 

      
# Separador de partes

$adj1 $UN_SALTO.$UN_SALTO;

// Unión de las diferentes partes para crear
   // el cuerpo del mensaje


  
$mensaje=$texto.$adj1;

 
// envio del mensaje 

  
if( mail($destinatario$titulo$mensaje,$cabecera)){
    echo 
"mensaje enviado";
}

?>
  #2 (permalink)  
Antiguo 11/11/2007, 15:50
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Re: Enviar mail con correo adjunto usando la funcion mail()

solo una duda donde se supone guardas el archivo?
digo envias el mail cierto pero a alguna parte debe ir a buscar el archivo, digo tienes una ruta y todo pero donde :/ por ej. si tu en tu server tienes una carpeta ficherin y pones
/ficherin/archivo.extencion
google o lo que sea buscara en sus carpetas
/ficherin/archivo.ext
y obiamente no existe :P
no deberias poner la ruta completa ;)
http://tudomain.com/ficherin/archivo.ext

se entiende?
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #3 (permalink)  
Antiguo 11/11/2007, 17:51
 
Fecha de Ingreso: julio-2006
Ubicación: sevilla
Mensajes: 251
Antigüedad: 17 años, 9 meses
Puntos: 5
Re: Enviar mail con correo adjunto usando la funcion mail()

Sinceramente estoy perdido no encuentro ningunsitio donde expliquen como enviar un mail con fichero adjunto
  #4 (permalink)  
Antiguo 11/11/2007, 18:10
Avatar de Michael_Jival  
Fecha de Ingreso: noviembre-2007
Mensajes: 28
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Enviar mail con correo adjunto usando la funcion mail()

HOLA AMIGO PRIMERO QUE NADA DEJAME DECIRTE QUE HE INVESTIGADO UN POCO SOBRE ESTE TEMA Y LA FUNCION MAIL( COMO TAL NO PERI¡MITE ENVIAR ADJUNTOS DEBES INVESTIGAR SOBRE LA FUNCION

Código PHP:
function form_mail(); 
DE HECHO DEJEMONOS DE PALABRAS AMIGO AQUI ESTA COMPLETO Y FUNCIONA A LA PERFECCION SOLO PRUEBALO Y MODIFICALO A TU GUSTO,

BENDICIONES AMIGO.

Código HTML:
Formulario.php:

<form name='formulario' id='formulario' method='post' action='enviar.php' target='_self' enctype="multipart/form-data"> 
<p>Nombre <input type='text' name='Nombre' id='Nombre'></p> 
<p>E-mail 
<input type='text' name='email' id='email'>
</p>
<p>Asunto 
<input type='text' name='asunto' id='asunto' />
</p>
<p>Mensaje 
<textarea name="mensaje" cols="50" rows="10" id="mensaje"></textarea>
</p>
<p>Adjuntar archivo: <input type='file' name='archivo1' id='archivo1'></p> 
<p>
<input type='submit' value='Enviar'> 
</p> 
</form>

 Como podéis ver, en el form del código anterior, se manda a enviar.php, ese archivo es el que va a mandar el email con el archivo adjunto. Aquí os dejo el codigo
Código PHP:

enviar.php:

<?php 
function form_mail($sPara$sAsunto$sTexto$sDe)

$bHayFicheros 0
$sCabeceraTexto ""
$sAdjuntos ""

if (
$sDe)$sCabeceras "From:".$sDe."\n"
else 
$sCabeceras ""
$sCabeceras .= "MIME-version: 1.0\n"
foreach (
$_POST as $sNombre => $sValor
$sTexto $sTexto."\n".$sNombre." = ".$sValor

foreach (
$_FILES as $vAdjunto)

if (
$bHayFicheros == 0)

$bHayFicheros 1
$sCabeceras .= "Content-type: multipart/mixed;"
$sCabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n"

$sCabeceraTexto "----_Separador-de-mensajes_--\n"
$sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n"
$sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n"

$sTexto $sCabeceraTexto.$sTexto

if (
$vAdjunto["size"] > 0)

$sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n"
$sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";; 
$sAdjuntos .= "Content-Transfer-Encoding: BASE64\n"
$sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n"

$oFichero fopen($vAdjunto["tmp_name"], 'r'); 
$sContenido fread($oFicherofilesize($vAdjunto["tmp_name"])); 
$sAdjuntos .= chunk_split(base64_encode($sContenido)); 
fclose($oFichero); 



if (
$bHayFicheros
$sTexto .= $sAdjuntos."\n\n----_Separador-de-mensajes_----\n"
return(
mail($sPara$sAsunto$sTexto$sCabeceras)); 


//cambiar aqui el email 
if (form_mail("[email protected]"$_POST[asunto], 
"Los datos introducidos en el formulario son:\n\n"$_POST[email])) 
echo 
"Su formulario ha sido enviado con exito"
?>
  #5 (permalink)  
Antiguo 13/11/2007, 16:28
Avatar de indy1508  
Fecha de Ingreso: mayo-2007
Ubicación: Monterrey, N.L. México.
Mensajes: 212
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Enviar mail con correo adjunto usando la funcion mail()

Hola Michael_jival:

Acabo de copiar tu codigo para probarlo pero, no me funciona, he buscado por largo tiempo como enviar un correo desde php y no lo pude conseguir, lo dejé por un tiempo y me puse a avanzar en otras cosas.

Ahora estoy retomandolo otra vez y no funciona, me marca el error:

Warning: mail() [function.mail]: SMTP server response: 550 5.7.1 Unable to relay for [email protected] in C:\Inetpub\wwwroot\Correo\email.php on line 51

Esta es la linea 51:

return(mail($sPara, $sAsunto, $sTexto, $sCabeceras));

He buscado informacion del SMTP de IIS de windows2000, segun encontré un apartado donde explican como configurarlo pero sigue igual.

Espero y me puedas orientar en cómo configurar el SMTP o que tengo que hacer para que funcione.

de antemano gracias.

saludos.
  #6 (permalink)  
Antiguo 13/11/2007, 16:37
Avatar de ferbux  
Fecha de Ingreso: mayo-2007
Ubicación: por ahí intentado ayudar
Mensajes: 823
Antigüedad: 16 años, 11 meses
Puntos: 6
Re: Enviar mail con correo adjunto usando la funcion mail()

Hola Indy1508, prueba con este código:

Código:
<? 
$destinatario = "[email protected]"; 
$asunto = "Este mensaje es de prueba"; 
$cuerpo = ' 
<html> 
<head> 
   <title>Prueba de correo</title> 
</head> 
<body> 
<h1>Hola</h1> 
<p> 
<b>Bienvenidos a mi prueba de envio de mail. 
</p> 
</body> 
</html> 
'; 

//para el envío en formato HTML 
$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 

//dirección del remitente 
$headers .= "From: tunombre<[email protected]>\r\n"; 

//dirección de respuesta, si queremos que sea distinta que la del remitente 
$headers .= "Reply-To: mailderespuesta\r\n"; 

//ruta del mensaje desde origen a destino 
$headers .= "Return-path: [email protected]\r\n"; 

//direcciones que recibián copia 
$headers .= "Cc: [email protected]\r\n"; 

//direcciones que recibirán copia oculta 
$headers .= "Bcc: [email protected]\r\n"; 

mail($destinatario,$asunto,$cuerpo,$headers) 
?>
Salu2
__________________
"Eres grande por que caminas entre gigantes"
  #7 (permalink)  
Antiguo 14/11/2007, 09:31
Avatar de indy1508  
Fecha de Ingreso: mayo-2007
Ubicación: Monterrey, N.L. México.
Mensajes: 212
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Enviar mail con correo adjunto usando la funcion mail()

Gracias Ferbux, pero me sigue marcando el error:

Warning: mail() [function.mail]: SMTP server response: 501 5.5.4 Invalid Address in C:\Inetpub\wwwroot\Correo\prueba.php on line 37

es la linea de:

mail($destinatario,$asunto,$cuerpo,$headers)
  #8 (permalink)  
Antiguo 14/11/2007, 09:44
Avatar de jorgedx  
Fecha de Ingreso: junio-2005
Ubicación: Chile, Los Andes
Mensajes: 406
Antigüedad: 18 años, 10 meses
Puntos: 4
Re: Enviar mail con correo adjunto usando la funcion mail()

lo que pasa es que no tienes un servidor smtp para enviar correo o que este mal configurado, lo mas probable es que lo estes haciendo en localhost, por eso
Código:
Warning: mail() [function.mail]: SMTP server response: 501 5.5.4 Invalid Address in C:\Inetpub\wwwroot\Correo\prueba.php on line 37
Saludos
__________________
Nuevamente a las pistas ...
  #9 (permalink)  
Antiguo 14/11/2007, 10:46
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Enviar mail con correo adjunto usando la funcion mail()

Tambien puedes usar phpmailer, una clase que permite enviar mails con archivos adjuntos.
Es muy facil de utilizar.
  #10 (permalink)  
Antiguo 14/11/2007, 11:19
Avatar de indy1508  
Fecha de Ingreso: mayo-2007
Ubicación: Monterrey, N.L. México.
Mensajes: 212
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Enviar mail con correo adjunto usando la funcion mail()

Si jorgedx, de hecho, como mencioné más arriba, busqué info para configurar el smtp, pero ni así, y si, lo estoy trabajando de forma local, probar antes de subirlo al server.

Voy a probar con phpmailer a ver si con este puedo ya hechar a andar este modulo, gracias por la sugerencia clinisbut, cualquier duda los vuelvo a consular.

Saludos.
  #11 (permalink)  
Antiguo 15/11/2007, 17:33
Avatar de indy1508  
Fecha de Ingreso: mayo-2007
Ubicación: Monterrey, N.L. México.
Mensajes: 212
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Enviar mail con correo adjunto usando la funcion mail()

Hola nuevamente.

clinisbut seguí los pasos para la instalacion del phpmailer, bueno, hasta donde pude entender, ya que está en ingles.

Supuestamente inserté en el archivo de php.ini en la seccion de

[PHP]
class.phpmailer.php

y despues copié el archivo a la carpeta donde tengo php, inserté en la pagina de envio de correo la sentencia "require("class.phpmailer.php")" corri la pagina y me volvió a mandar error, algo sobre que no encontraba el archivo class.phpmailer.php, entonces inserté el archivo donde tengo la pagina para el envio de correo y ahora me manda el error:

Warning: mail() [function.mail]: SMTP server response: 550 5.7.1 Unable to relay for [email protected] in C:\Inetpub\wwwroot\Correo\email.php on line 60

Warning: mail() [function.mail]: SMTP server response: 550 5.7.1 Unable to relay for [email protected] in C:\Inetpub\wwwroot\Correo\email.php on line 60

Osea, sigue igual.

Me gustaría que me dijeras cómo se configura paso a paso por favor o hay algo que me salté en el proceso.

Gracias de antemano.

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 14:25.