PHP - adjuntar archivo con phpmailer

   
Vista:

adjuntar archivo con phpmailer

Publicado por zendi (824 intervenciones) el 23/08/2015 21:22:32
He creado un formulario para enviar correos con archivos adjuntos, pero cuando adjunto algun archivo tarda demasiado en enviarlo, estoy utilizando la funcion
1
set_time_limit(500);
lo he colocado con 30 y hasta 50, pero persiste el problema.
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

adjuntar archivo con phpmailer

Publicado por zendi (824 intervenciones) el 25/08/2015 05:05:41
¿Tiene alguien alguna idea?
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 JAG

adjuntar archivo con phpmailer

Publicado por JAG (16 intervenciones) el 26/08/2015 00:27:00
Prueba con esto... A mi también me dio ruido en uno de mis códigos...

ini_set('max_execution_time', 300);

Si con esta función no te funciona revisa el código que estás enviando por mail... Si quieres lo puedes pegar por aquí y le echamos un ojo. Si tienes alguna duda ya te digo, yo hice hace poco una aplicación que comprimía varios archivos en un zip y lo enviaba por correo, o mandar esos archivos sin necesidad de comprimirlos.

Un saludo!
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

adjuntar archivo con phpmailer

Publicado por zendi (824 intervenciones) el 27/08/2015 03:19:26
Hola jag, lo probare y te aviso y me parece interesante lo de comprimir en un zip para enviarlo.
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 JAG

adjuntar archivo con phpmailer

Publicado por JAG (16 intervenciones) el 27/08/2015 10:39:26
Ok! Avisa cuando lo pruebes... si te hace falta el código me dices ;)
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

adjuntar archivo con phpmailer

Publicado por zendi (824 intervenciones) el 27/08/2015 17:41:11
Hola JAG. Ya lo probé con la linea de codigo que me enviaste pero sigue arrojando el error este:

1
Fatal error: Maximum execution time of 300 seconds exceeded in C:\xampp\htdocs\prueba\pediatria\PHPMailer-master\class.smtp.php on line 934

anteriormente estaba funcionando con esta funcion que averigué en PHP.net:
1
set_time_limit(500);
y lo que hice fue dejar este mismo
1
set_time_limit(500);
más tu funcion que me sugeriste:
1
ini_set('max_execution_time', 300);
De todos modos voy a seguir trabajando en esto, cualquier ayuda te lo agradezco.
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

adjuntar archivo con phpmailer

Publicado por zendi (824 intervenciones) el 27/08/2015 18:20:31
Hola, bueno con la funcion que me sugeriste no funciona; en realidad funciona con esta:
1
set_time_limit(500);
pero persiste la lentitud.

Me dijiste que tienes un codigo....?
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 JAG

adjuntar archivo con phpmailer

Publicado por JAG (16 intervenciones) el 27/08/2015 20:18:52
Si claro! Te lo adjunto...

http://pastebin.com/CYyAMv8X

Si quieres te explico un poco ya que te he pegado el trozo de código tal cual... Para mi programa primero lo que hago es ver si hay anexos que adjuntar, si los hay tengo dos funciones que mandan correos, una para mandar zip mas html y otra para mandar pdf mas html. El usuario ha elegido previamente como mandar ese correo, es por eso el uso de la variable $opcionesAnexos, así creo el zip si es necesario, mando los pdf's o mando el correo sin adjuntos... Si tienes alguna duda me dices ok?

Espero que te sirva!!


PD: Esa lentitud de la que me hablas también va a depender del tamaño del fichero y de la velocidad de subida de tu adsl...
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

adjuntar archivo con phpmailer

Publicado por zendi (824 intervenciones) el 28/08/2015 03:18:38
Que tal Jag, ya he probado tu codigo en mi localhost, pero debo tener un formulario para conectarlo con tu codigo.

Te envio mis codigos; el formulario y el que procesa el envío. A ver si puedes ayudarme en aplicar tu codigo en el mio.

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
<?php
  $connect = pg_connect("host=localhost port=5432 dbname=pediatria user=postgres password=movilnet");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <link rel="stylesheet" href="estilo.css" type="text/css">
 
<style>
	form {
		margin: 1em auto;
	    text-align: center;
     }
	span{
	  color: #F60;
	  font-size: 1.5 em;
	}
</style>
</head>
<!--/////////Codigo para enviar correos a un solo destinatario, con enviar1.php.-->
<body>
<form name="mail_frm" class="contact_form" method="post" enctype="multipart/form-data" action="enviar1.php">
 
<ul>
                <li>
                    <h2>Mensajería</h2>
                </li>
 
            <li>
			 <input type="text" name="de_txt" id='De' placeholder="De" required>
                <span class="form_hint">Formato correcto:  "ejemplo@hotmail.com"</span>
            </li>
             <li>
            <input type="text" name="para_txt" placeholder="Para" required>
                <span class="form_hint">Formato correcto:  "ejemplo@hotmail.com"</span>
            </li>
 
            <li>
           <input type="text" name="cco_txt" id="Concopia" placeholder="CCO">
                <span class="form_hint">Formato correcto:  "ejemplo@hotmail.com"</span>
 
            </li>
            <li>
 
          <input type="text" name="contactos_txt" placeholder="Contactos">
                <span class="form_hint">Formato correcto: "Contactos"</span>
 
            </li>
 
            <li>
          <input type="text" name="asunto_txt" placeholder="Asunto" required>
                <span class="form_hint">Formato correcto: "Asunto"</span>
 
            </li>
 
            <li>
          <input type="file" name="archivo_fls" placeholder="Adjuntar Archivos">
                  <span class="form_hint">Formato correcto: "Adjuntar Archivo"</span>
            </li>
<?php
  error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
 
$destino = filesize($_FILES["archivo_fls"]["name"]);
var_dump($destino . ' bytes');
 
?>
            <li>
          <textarea name= "mensaje_txa" cols="40" rows="6" placeholder="Ingresa un mensaje (opcional)" required> </textarea>
                  <span class="form_hint">Formato correcto: "Mensaje"</span>
            </li>
 
            <li align='center'>
                <button class="submit" type='submit' value='Enviar formulario'>Enviar Mensaje</button>
                <button class="submit" type='reset' value='Reiniciar formulario'>Borrar Datos</button>
            </li>
</ul>
 
<!--  <input type="submit" name="enviar_btn" value="Enviar"/><br/>
-->  <?php 
  error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
	if(isset($_GET["respuesta"])){
	   echo "<span>".$_GET["respuesta"] ."</span>";
	
	}
  
  ?>
  
</form>
</body>
</html>

y el que procesa:
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
<?php
//set_time_limit(1000);
//ini_set('max_execution_time', 300); //300 seconds = 5 minutes
/////////Codigo para enviar correos a un solo destinatario.
require("PHPMailer-master/class.phpmailer.php");
require("PHPMailer-master/class.smtp.php");
//error_reporting(E_ALL ^ E_NOTICE);
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
$de = $_POST["de_txt"];
 
$para = $_POST["para_txt"];
 
$asunto = $_POST["asunto_txt"];
$addcco = $_POST["cco_txt"];
$archivo = $_FILES["archivo_fls"]["tmp_name"];
$destino = $_FILES["archivo_fls"]["name"];
$mensaje = $_POST["mensaje_txa"];
copy($_FILES["archivo_fls"]["tmp_name"],$_SERVER['DOCUMENT_ROOT']."/archivos/".$_FILES["archivo_fls"]["name"]);
copy($_FILES["archivo_fls"]["tmp_name"],"archivos/".$_FILES["archivo_fls"]["name"]);
$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 = $de; // MAIL username
$smtp->Password = "1234"; // MAIL password
$smtp->Port = 587;
# datos de quien realiza el envio
$smtp->From = $de; // from mail
$smtp->FromName = "Alejandro"; // from mail name
# Indicamos la dirección donde enviar el mensaje
$para1= $para;
$nameTo=$para1;
$smtp->AddAddress($para1,utf8_decode($nameTo));
//$smtp->AddBCC($addcco,$nameTo);
$smtp->Subject = $asunto;
$smtp->Body = $mensaje;
$smtp->WordWrap = 50;
//$smtp->Timeout=50;
$smtp->IsHTML(true);
$smtp->MsgHTML($mensaje);//
$smtp->AddAttachment($_FILES["archivo_fls"]["tmp_name"],$_FILES["archivo_fls"]["name"]);
   if (!$smtp->Send())
      {
  	    $respuesta ="El mensaje no se pudo enviar";
		$respuesta .="Error: " .$mail->ErrorInfo;
      }
   else
      {
        $respuesta ="El mensaje ha sido enviado";
      }
   header("Location:correomail.php?respuesta=$respuesta");
?>
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 JAG

adjuntar archivo con phpmailer

Publicado por JAG (16 intervenciones) el 28/08/2015 14:45:19
El formulario y demás no tendrías que tocarlo para nada... simplemente el que procesa recibiría por post los datos del formulario y ya esos datos deberías de pasarselos a las funciones que yo llamo "mail_attachment".

El problema creo que está en que tu estás usando la clase PHPMailer... yo simplemente uso la función mail de php como verás en mi código. Ya queda a tu elección, la verdad es que yo hasta ahora he usado la función mail y me ha ido genial.

Ten en cuenta también que para mandar correos desde tu servidor tienes que configurar algunas cosillas. En mi caso, siempre suelo programar en el entorno XAMPP. Te adjunto algunos enlaces para que hagas dicha configuración si no la tienes hecha:

http://ejemplocodigo.com/ejemplo-xampp-enviar-un-email-en-localhost/
http://drupalalsur.org/videos/enviar-correos-con-xampp-en-local

Si tienes alguna duda escribe... estaré por aquí.
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

adjuntar archivo con phpmailer

Publicado por zendi (824 intervenciones) el 28/08/2015 17:41:46
Hola JAG, exactamente estoy trabajando con PHPMailer y ya noté que trabajas con la funcion mail de PHP.
Y tengo configurado el xampp
pero yo podría adaptar esta funcion
1
$adjunto= chunk_split(base64_encode(file_get_contents($filename)));
para despedazar el archivo adjunto en mi codigo.

Estoy trabajando en esto te escribo si hay dudas.
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

adjuntar archivo con phpmailer

Publicado por zendi (824 intervenciones) el 30/08/2015 02:33:50
Hola JAG. Te hago una pregunta una vez que aplico esta funcion:
1
chunk_split(base64_encode(file_get_contents($filename)))
el crea una cadena con el archivo ¿Debo ahora aplicar
1
base64_decode
para completar el envio? o ya que en tu codigo obtienes la variable
1
$adjunto= chunk_split(base64_encode(file_get_contents($filename)));
pero no la veo en la funcion:
1
function mail_attachment2($anexosMail, $copiaHayAnexos, $mailto, $from_mail, $from_name, $subject, $message)
es lo que no capto en realidad. Estoy tratando de aplicarla en mi codigo.
Saludos.
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 JAG

adjuntar archivo con phpmailer

Publicado por JAG (16 intervenciones) el 31/08/2015 22:45:48
Hola zendi!

No entiendo muy bien lo que me estás preguntando... para nada tienes que usar el decode.
Para que te hagas una idea y entiendas mejor el código, decirte que según como quieras mandar tus adjuntos uses una función u otra. No se por qué quieres o necesitas usar el decode... No pretendo que te copies el código entero sino que captes lo que necesitas para tu aplicación y lo adaptes, lo que hice fue copiarte el tocho para que tu cojas lo que necesites.

Saludos!
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

adjuntar archivo con phpmailer

Publicado por zendi (824 intervenciones) el 01/09/2015 22:30:15
Hola JAG, yo estoy claro en que la funcion chunk_split
Divide una cadena en trozos más pequeños, y lo que quise preguntarte fue que como aplico esta funcion al archivo adjunto?

Y disculpa mi desconocimiento. Solo que estoy un poco enredado en esto.

Saludos.
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