PHP - funcion mail() archivo adjunto

   
Vista:

funcion mail() archivo adjunto

Publicado por jhon jairo (26 intervenciones) el 17/03/2015 06:03:52
HOLA BUEN DIA ...

TENGO DIFICULTAD PARA ENVIAR UN ARCHIVO ADJUNTO POR LA FUNCION MAIL() .
AL EJECUTAR EL CODIGO NO ME GENERA NINGUN ERROR, LOS VALORES SE INGRESAN CORRECTAMENTE EN LAS VARIABLES -> LO HE VERIFICADO, PERO NO ME ENVIA EL ARCHIVO !

POR FAVOR SOLICITO QUE ALGUIEN EXPERTO EN MIME, VERIFIQUE LAS CABECERAS Y EL CUERPO DEL MENSAJE

ADJUNTO LA PORCION DE CODIGO CORRESPONDIENTE AL MAIL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
if($xen==0){
    $boundary='didondinaditondelosdudosdodudundodudindon';
 
    $headers= "From: MISITIO<sistemas@misitio.com>\r\n"
    $headers.="MIME-Version: 1.0\r\n"
    $headers.="Content-Type: multipart/mixed;"
    $headers.="boundary=\"$boundary\"\r\n\n";
    //Cuerpo del email comenzando por el mensaje principal
    $body="--". $boundary ."\n
    Content-Type: text/plain; charset=ISO-8859-1\r\n\n
    Mensaje principal del email.\n\n";
 
 
    /* Archivo adjunto, vamos a indicar nuestro archivo */
 
    $archivo=file_get_contents('./PDFS/'.$archivos.'');
 
    /* Utilizaremos chunk_split() que organizará come se debe la codificación hecha en base 64 para estar conforme a los estándares */
    $archivo=chunk_split( base64_encode($archivo) );
 
    //Escritura del archivo adjunto
    $body = $body . "--" .$boundary. "\n
    Content-Type: application/pdf; name=\"nombre_archivo\"\r\n
    Content-Transfer-Encoding: base64\r\n
    Content-Disposition: attachment; filename=\"nombre_archivo\"\r\n\n
    $archivo";
 
    //Cierre de la frontera
    $body = $body . "--" . $boundary ."--";
    //printf("%s <br>",$body);
    //Envío del email
    mail($CORREO, "objeto", $body, $headers);
 
 
    $query4=" INSERT INTO `enmail` (CODIGO, FECHA, IDENTIFICACION ) VALUES('$rutaguarda','$fecha_actual','$IDENTIFICACION')";
    $response4 = mysql_query($query4,$link);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

funcion mail() archivo adjunto

Publicado por zendi (824 intervenciones) el 17/03/2015 17:45:14
Hola que tal, bueno te puedo ayudar con este codigo; analizalo y nos comentas a ver si te funciona.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
te conectas a tu servidor
$connect = pg_connect("host=localhost port=5432 dbname=pediatria user=postgres password=*****");
////estas clases las bajas de este sitio:http://phpmailer.worxware.com
require("PHPMailer-master/class.phpmailer.php");
require("PHPMailer-master/class.smtp.php");
 
 
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
$de = $_POST["de_txt"];
$para = $_POST["para_txt"];
$asunto = $_POST["asunto_txt"];
$archivo = $_FILES["archivo_fls"]["tmp_name"];
$destino = $_SERVER['DOCUMENT_ROOT']."/".$_FILES["archivo_fls"]["name"];
//echo $_SERVER['DOCUMENT_ROOT'];
$mensaje = $_POST["mensaje_txa"];
if(move_uploaded_file($archivo,$destino))
{
	$smtp=new PHPMailer();
	# Indicamos que vamos a utilizar un servidor SMTP 
	$smtp->IsSMTP();
	# Definimos el formato del correo con UTF-8 
	$smtp->CharSet="UTF-8";
//	$smtp->SMTPDebug = 1; 
	# autenticación contra nuestro servidor smtp 
	$smtp->SMTPAuth = true; // enable SMTP authentication
	$smtp->SMTPSecure = "tls";
	$smtp->Host = "smtp.live.com";
	// sets MAIL as the SMTP server 
	$smtp->Username = "tucorreo@hotmail.com";
	// MAIL username
	$smtp->Password = "********";
	// MAIL password 
	$smtp->Port = 587;
	# datos de quien realiza el envio 
	$smtp->From = "tucorreo@hotmail.com";
	// from mail 
	$smtp->FromName = "tu nombre";
	// from mail name # Indicamos la dirección donde enviar el mensaje 
/*	$para="aquienva@hotmail.com";
	$nameTo="Andres";
	$smtp->AddAddress($para,$nameTo); */
    $smtp->Subject = $asunto;
    $smtp->Body = $mensaje;
	$smtp->WordWrap = 50;
	$smtp->Timeout=30;
	$smtp->IsHTML(true);
    $smtp->MsgHTML($mensaje);
	$smtp->AddAttachment($destino, $_FILES["archivo_fls"]["name"]);
/////la conexion que tienes en tu servidor local o remoto con todo
    $connect = pg_connect("host=localhost port=5432 dbname=administra user=postgres password=xxxxxx");
/*creo el array o query que debe traer tanto el nombre como la cuenta de correos a quienes va dirigido*/
    $mailTo = "SELECT nombres,cta_correo FROM propietarios";
    $mailTo = @pg_query($connect,$mailTo);
while($select3 = @pg_fetch_array($mailTo))
{
      $name = $select3['nombres'];
	  $mail = $select3['cta_correo'];
      $smtp->ClearAllRecipients();
      $smtp->AddAddress($mail,$name);
 
   if (!$smtp->Send())
      {
         $respuesta ="El mensaje no se pudo enviar";
         $respuesta .="Error: " .$mail->ErrorInfo;
	  }
   else
	  {
    	 $respuesta ="El mensaje ha sido enviado a todos los Fulanos a quienes los envias";
	  }
}
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <style>
  form { margin: 1em auto; text-align: center; }
   span{ color: #F60; font-size: 1.5 em; } 
   </style>
</head>
<body> <b>
<?php echo $respuesta;?>
</b>
<form name="mail_frm" method="post" enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"]?>">
De:<input type="text" name="de_txt" /> <br/> <br/>
<!--Para:<input type="text" name="para_txt" /> <br/> <br/>
-->Asunto:<input type="text" name="asunto_txt" /> <br/> <br/>
Adjuntar Archivo: <input type="file" name="archivo_fls" /> <br/> <br/>
Mensaje:<br /><textarea name= "mensaje_txa"/> </textarea> <br/> <br/>
  <input type="submit" name="enviar_btn" value="Enviar"/><br/>
  </form> 
</body> 
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

funcion mail() archivo adjunto

Publicado por jhon jairo (26 intervenciones) el 18/03/2015 21:13:44
Ya habia realizado el codigo utilizando phpmailer, igualmente se presentaron dificultades para enviar el archivo, asi que recurri a buscar mas soporte con la funcion mail().


Revise que $archivo=file_get_contents(); lee el contenido del archivo y lo almacena en una variable, pero yo necesito que se envie un archivo pdf ,

Casi no encuentro mucha referencia sobre esto en Internet, agradezco su atención y su colaboración
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

funcion mail() archivo adjunto

Publicado por jhon jairo (26 intervenciones) el 20/03/2015 00:01:45
volvi a utilizar la clase php mailer , por favor alguien que me revise el codigo por cuanto el archivo adjunto no llega al correo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
if($xen==0){
$file='./PDFS/'.$archivos;
 
require("class.phpmailer.php");
require("class.smtp.php");
 
//Especificamos los datos y configuración del servidor
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
 
//Nos autenticamos con nuestras credenciales en el servidor de correo Gmail
$mail->Username = "micorreo@gmail.com";
$mail->Password = "mi contraseña";
 
//Agregamos la información que el correo requiere
$mail->From = "micorreo@gmail.com";
$mail->FromName = "Tu Nombre";
$mail->Subject = "Enviar Mail con PHPMailer";
$mail->AltBody = "";
$mail->MsgHTML("<h1>Hola Mundo!</h1>");
$mail->AddAttachment('./PDFS/'.$archivos.'');
$mail->AddAddress("correodestino@hotmail.com", "Usuario Prueba");
$mail->IsHTML(true);
 
//Enviamos el correo electrónico
$mail->Send();
$query4=" INSERT INTO `enmail` (CODIGO, FECHA, IDENTIFICACION ) VALUES('$rutaguarda','$fecha_actual','$IDENTIFICACION')";
$response4 = mysql_query($query4,$link);
}

el codigo completo esta en la carpeta public html
la clase class.phpmailer.php esta en la carpeta public html
y la clase class.smtp.php esta en la carpeta public html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

funcion mail() archivo adjunto

Publicado por xve (5516 intervenciones) el 20/03/2015 07:46:39
Hola Jhon, que valor tiene la variable $archivos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

funcion mail() archivo adjunto

Publicado por jhon jairo (26 intervenciones) el 20/03/2015 14:54:36
HOLA BUEN DIA XVE

La variable archivos se obtiene de una consulta de la base de datos, en ella (la variable) almacena el nombre del archivo

generalmente la variable tiene valores como este:

$archivos="01400423-236.pdf"

todos los archivos son de tipo pdf y se almacenan en la ruta public html/pdfs/

me gustaria que revisemos en lo posible el primer caso que envie por cuanto el script si se ejecuta siendo la falencia el envio del archivo.

en el segundo caso (phpmailer) el escript no se me ejecuta.

Gracias por su colaboración.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

funcion mail() archivo adjunto

Publicado por xve (5516 intervenciones) el 20/03/2015 18:47:45
Hola Jhon, gracias por comentarlo...

La manera de hacerlo con mail(), yo hace años que no la utilizo, ya que no hay garantía de que llegue por los anti spam.

Sobre el segundo, con phpmailer() tendría que funcionar-te sin problema...
En esta linea:
1
$mail->AddAttachment('./PDFS/'.$archivos.'');
creo que tendiras que poner la ruta absoluta o relativa.

Si por ejemplo, tu archivo esta en la raíz tendrías que poner:
1
$mail->AddAttachment('PDFS/'.$archivos.'');

Si por ejemplo, tu archivo php esta en la carpeta "codigo", tendrías que poner:
1
$mail->AddAttachment('../PDFS/'.$archivos.'');

Puedes probarlo y comentarnos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

funcion mail() archivo adjunto

Publicado por jhon jairo (26 intervenciones) el 24/03/2015 02:54:09
Hola como le comente tengo problemas con phpmailer asi que opte por la funcion mail() ...

Ahora si me envia el archivo pero tengo dificultad al enviar las lineas html, a ver si me puede ayudar revisando y comentando.

El Script si se ejecuta y no muestra ningun error.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
if($xen==0){
    $vAdjunto='./PDFS/'.$archivos;
    $encabezado=$codigop."-".$nombrepac;
    $mensaje = "<HTML><BODY>";
    $mensaje.="<H4>BIENVENIDO: ".$nombrepac."</H4>";
    $mensaje.="<H4>Adjuntos estan los resultados con referencia".$codigop." tomados el dia :".$fechar."</H4>";
    $mensaje.="<H5>de las siguientes pruebas: <br>".$nomexamen."</H5>";
    $mensaje.="<BR>";
    $mensaje.="<BR>";
    $mensaje.="<H5>Este mensaje fue realizado por un software, por favor no conteste este mensaje.</H5>";
    $mensaje.="<BR>";
    $mensaje.="<BR>";
    $mensaje.="<H5>Gracias por su atencion: </H5>";
    $mensaje.="<BR>";
    $mensaje.="<H5>Empresa Hospital </H5>";
    $mensaje.="<H6><blockquote><blockquote><blockquote><blockquote>desarrollado by: jjfchamorro</blockquote></blockquote></blockquote></blockquote></H6>";
    $mensaje.="</BODY></HTML>";
 
    $sCabeceras = "";
    $sCabeceras .= "MIME-version: 1.0\n";
    $sCabeceras .= "Content-type: multipart/mixed;";
    $sCabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n";
    $sCabeceras .= "From: Empresa Hospital <sistemas@Empresa Hospital.com>" . "\r\n";
    $sCabeceraTexto = "----_Separador-de-mensajes_--\n";
    $sCabeceraTexto .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";;
    $sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n";
 
 
    $sAdjuntos = "";
    $sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n";
    $sAdjuntos .= "Content-type: ".filetype($vAdjunto).";name=\"".$vAdjunto."\"\n";;
    $sAdjuntos .= "Content-Transfer-Encoding: BASE64\n";
    $sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto."\"\n\n";
    $sTexto=$sCabeceraTexto.$mensaje;
 
    $oFichero = fopen($vAdjunto, 'r');
    $sContenido = fread($oFichero, filesize($vAdjunto));
    $sAdjuntos .= chunk_split(base64_encode($sContenido));
    fclose($oFichero);
    //printf("%s <br>",$sContenido);
 
    $sTexto.=$sAdjuntos."\n\n----_Separador-de-mensajes_----\n";
    //printf("%s <br>",$sTexto);
 
    mail($CORREO, $encabezado , $sTexto, $sCabeceras);
 
 
    $query4=" INSERT INTO `enmail` (CODIGO, FECHA, IDENTIFICACION ) VALUES('$rutaguarda','$fecha_actual','$IDENTIFICACION')";
    $response4 = mysql_query($query4,$link);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

funcion mail() archivo adjunto

Publicado por jhon jairo (26 intervenciones) el 24/03/2015 04:40:29
Perdon ya me di cuenta donde tengo el error, tengo escrito ;; al final de una de las cabeceras,
remplase la cabecera de html por Content-Type: text/plain; charset=ISO-8859-1\r\n\n
y remplase tambien el codigo html por una variable de texto .

FUNCIONA!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

funcion mail() archivo adjunto

Publicado por xve (5516 intervenciones) el 24/03/2015 09:00:58
Gracias por comentarlo Jhon!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar