Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/03/2016, 23:12
sesebas
 
Fecha de Ingreso: enero-2009
Mensajes: 173
Antigüedad: 15 años, 3 meses
Puntos: 1
PHP Mailer: Problemas en link con espacios en blanco

Buenos días (madrugada de jueves por aquí),

Estoy utilizando PhpMailer para el envío de correos desde una aplicación en la que vengo trabajando hace un poco de tiempo, pero tengo problemas con el link que incluyo en el correo para la descarga de un archivo. El lío se produce cuando en la ruta de descarga aparecen espacios en blanco, cuando esto ocurre la ruta se corta en la primera palabra que contiene espacio. Como no puedo cambiar la existencia de los espacios en blanco les escribo pidiendo ayuda para salir de este problema.

El envío de correo funciona (uso una cuenta de gmail), sólo que los enlaces no lo hacen.

Mi código:

Este es el formulario html:
Código HTML:
Ver original
  1.  
  2. <title>Enviar un enlace por e-mail</title>
  3. <!--
  4. <META content="text/html; charset=windows 1252">
  5. -->
  6. <META content="text/html; charset=UTF-8">
  7.  
  8. </head>
  9.  
  10.  
  11. <div style ="width:330px">
  12.  
  13. <FORM method="POST" action="http://localhost/send-email_IMILA.php" name="form_enviar">
  14.  
  15.  
  16. <input type="hidden" name="titulo" value=<?php echo $_GET["titulo"];?>>
  17.  
  18.  
  19. <input type="hidden" name="text_msg" value=<?php echo $_GET["text_msg"];?>>
  20.  
  21.  
  22. <input type="hidden" name="ruta" value=<?php echo $_GET["ruta"];?>>
  23.  
  24.   <table border="0" cellpadding="6" bgcolor="#EEEEEE" cellspacing="0" width="346"> <tr>
  25.       <td valign="TOP" align="center" width="308">
  26.         <table border="0" width="303" cellspacing="0" cellpadding="2">
  27.           <tr bgcolor="#EEEEEE">
  28.             <td colspan="2"><font face="Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">
  29.               <img src="/noticias/Images/topemail.gif" width="303" height="48" border=0> </font></td>
  30.  
  31.           </tr>
  32.           <tr>
  33.             <td colspan="2">&nbsp;</td>
  34.           </tr>
  35.           <tr>
  36.             <td><font face="Arial, Helvetica, sans-serif" size="2"><b><font color="336699">Nombre
  37.               destinatario</font></b></font></td>
  38.             <td> <font face="Arial, Helvetica, sans-serif" size="2">
  39.               <input type="text" name="text_name_destino" size="20" maxlength="50">
  40.               </font></td>
  41.           </tr>
  42.           <tr>
  43.             <td><font face="Arial, Helvetica, sans-serif" size="2"><b><font color="336699">Email
  44.               destinatario</font></b></font></td>
  45.             <td> <font face="Arial, Helvetica, sans-serif" size="2">
  46.               <input type="text" name="text_mail_destino" size="20" maxlength="50">
  47.               </font></td>
  48.           </tr>
  49.           <tr>
  50.             <td colspan="2">
  51.               <hr width="100%" size="1">
  52.             </td>
  53.           </tr>
  54.           <tr>
  55.             <td><font face="Arial, Helvetica, sans-serif" size="2"><b><font color="336699">Su
  56.               nombre</font></b></font></td>
  57.             <td> <font face="Arial, Helvetica, sans-serif" size="2">
  58.               <input type="text" name="text_name_origen" size="20" maxlength="50">
  59.               </font></td>
  60.           </tr>
  61.           <tr>
  62.             <td><font face="Arial, Helvetica, sans-serif" size="2"><b><font color="336699">Su
  63.               Email</font></b></font></td>
  64.             <td> <font face="Arial, Helvetica, sans-serif" size="2">
  65.               <input type="text" name="text_mail_origen" size="20" maxlength="50">
  66.               </font></td>
  67.           </tr>
  68.            
  69.           <tr>
  70.             <td align="center"  colspan="2"><font face="Arial, Helvetica, sans-serif" size="2"><b><font color="336699">Comentario</font></b>
  71.               </font></td>
  72.           </tr>
  73.          
  74.           <tr align="right">
  75.             <td colspan="2" align="center"> <font face="Arial, Helvetica, sans-serif" size="2">
  76.               <textarea rows="8" cols="30" name="text_comentario"></textarea>
  77.               </font> <br>
  78.              
  79.             </td>
  80.           </tr>
  81.           <tr>
  82.             <td colspan="2" align="center">
  83.                 <input type="button" name="Submit" value="Enviar" onClick="form_enviar.submit();  ">
  84.  
  85.             </td>
  86.           </tr>
  87.         </table>
  88.       </td>
  89.     </tr>
  90.   </table>
  91.  
  92. </form>
  93.  
  94.  
  95.  
  96. </body>
  97.  
  98. </html>

Mi php encargado del envío de correo":

Código PHP:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.  
  4. <HTML>
  5.  
  6. <HEAD>
  7. <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
  8. </HEAD>
  9.  
  10. <BODY>
  11.  
  12. <?php
  13.  
  14.    // Aqui controlo que la ruta recibida esté correcta... y lo está!!
  15.     print "<pre>";
  16.     urlencode(print_r($_GET['ruta']));
  17.     print "</pre>\n";
  18.  
  19.   require "includes/class.phpmailer.php";
  20.  
  21.   $mail = new phpmailer();
  22.  
  23.   $mail->PluginDir = "includes/";
  24.  
  25.    $mail->IsSMTP();
  26.  
  27.   $mail->Mailer = "smtp";
  28.  
  29.   //Asignamos a Host el nombre de nuestro servidor smtp
  30.  
  31.     $mail->Host = "smtp.gmail.com";
  32.  
  33.     $mail->SMTPAuth = true;
  34.  
  35. //Le decimos cual es nuestro nombre de usuario y password
  36.  
  37.  
  38.   //********** fuera de la oficina ***********
  39.  
  40.   $mail->Username = "[email protected]";
  41.  
  42.   $mail->Password = "xxxxxxx";
  43.   $mail->Port = 587;
  44.   $mail->SMTPSecure = "tls";
  45.  
  46.   $mail->Charset = 'UTF-8';
  47.  
  48. // Para indicar que el mensaje tiene HTML
  49.  
  50.   $mail->IsHTML(true);
  51.  
  52. //Para el que recibe
  53. $mail->SetFrom($_GET['text_mail_origen'], $_GET['text_name_origen']);
  54. $mail->From = "[email protected]";
  55.  
  56. $mail->AddReplyTo($_GET['text_mail_origen'], $_GET['text_name_origen']);
  57.  
  58. $mail->Timeout = 30;
  59.  
  60. //destino del correo
  61.  
  62. $mail->AddAddress($_GET['text_mail_destino']);
  63.  
  64. //Asignamos asunto y cuerpo del mensaje
  65.  
  66. //El cuerpo del mensaje lo ponemos en formato html, haciendo
  67.  
  68. //que se vea en negrita
  69.  
  70. $mail->Subject = $_GET['titulo'];
  71.  
  72. $origen = $_GET['ruta'];
  73.  
  74.  
  75.     // Segundo control para ver que se reciba bien la ruta... Está bien!!!
  76.     print "<pre>";
  77.     print_r($origen);
  78.     print "</pre>\n";
  79.  
  80.  
  81. $body = "Estimado(a) Sr(a).:<br><br><br>";
  82. $body .= $_GET['text_name_origen'] . " le invita a descargar el archivo vinculado al enlace que le ha compartido más abajo ";
  83. $body .= "con datos que le pueden interesar.<br><br>";
  84. $body .= "También Usted puede acceder al banco de datos existente en ";
  85. $body .= "<a href=http://SitioWeb.org/bdatos/imila/";
  86. $body .= ">";
  87. $body .= "Aqui puede encontrar más </a>";
  88. $body .= "y revisar más información que puede ser de su interés <br><br>";
  89.  
  90. // AQUI VIENE EL LINK QUE SE VA EN EL CORREO
  91. $body .= "<b>Archivo compartido:</b> <br>";
  92.  
  93. [B]//CUANDO LA RUTA ES ALGO COMO:[/B]
  94. //        /bdatos/imila/República Dominicana 2010/ExcelFiles/
  95.  
  96. $body .= "<a href=http:/";
  97. $body .= $_GET['ruta'] . ">";
  98.  
  99. // [B]El link que recibe el destinatario le llega como:[/B]
  100.  
  101. // [B]http://Sitio/bdatos/imila/República[/B]
  102.  
  103. // [B]Y PIERDO TODO EL RESTO!!![/B]
  104.  
  105. $body .= $_GET['text_msg']."</a>"."<br><br><br>";
  106. $body .= "<font color='#AB0D0D'>Comentario:</font><br><br>";
  107. $body .= $_GET['text_comentario'];
  108.  
  109. $mail->Body = $body;
  110.  
  111. //se envia el mensaje, si no ha habido problemas
  112.  
  113. //la variable $exito tendra el valor true
  114.  
  115. $exito = $mail->Send();
  116.  
  117. $intentos=1;
  118.  
  119. while ((!$exito) && ($intentos < 5)) {  sleep(5);
  120.  
  121. $exito = $mail->Send();
  122.  
  123. $intentos=$intentos+1;
  124.  
  125. }
  126.  
  127. if(!$exito) {
  128.  
  129. echo "Problemas enviando correo electrónico a ";
  130.  
  131. echo "<br/>".$mail->ErrorInfo;
  132.  
  133. }
  134.  
  135. else {
  136.  
  137. echo "Mensaje enviado correctamente","<br><br>";
  138.  
  139.  
  140. echo '<script type="text/javascript">setTimeout(function(){window.close();},2000);</script>';  
  141. }
  142.  
  143. ?>
  144.  
  145.  
  146. </BODY>
  147. </HTML>

Gracias por la ayuda que me puedan dar para solucionar esto... ya probé con "unlercode"; poner caracteres como "%20"; he buscado en el foro e internet (por ahí capaz que no exaustivamente), pero aquí sigo sin resolver.

Saludos