Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP Mailer: Problemas en link con espacios en blanco

Estas en el tema de PHP Mailer: Problemas en link con espacios en blanco en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 09/03/2016, 23:12
 
Fecha de Ingreso: enero-2009
Mensajes: 173
Antigüedad: 10 años, 10 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
  #2 (permalink)  
Antiguo 10/03/2016, 00:38
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 16 años
Puntos: 154
Respuesta: PHP Mailer: Problemas en link con espacios en blanco

Hola sesebas,

Lo único que se me ocurre decirte es esto:

Código PHP:
Ver original
  1. $nombre = str_replace(" ", "%20", $_GET['ruta'];

Aparte, me parece que el código no está lo ordenado que debería... revisa eso también a ver.

Espero que te sirva.
  #3 (permalink)  
Antiguo 10/03/2016, 06:18
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 11 años, 1 mes
Puntos: 175
Respuesta: PHP Mailer: Problemas en link con espacios en blanco

El problema es que no sabemos como se imprime en la salida tu URL, tal vez si nos lo muestras... pudieras generar una funcion con str_replace como te dijeron, pero habrá que ver como sale la URL para estar seguros que es solo eso... tambièn deberías colocar un ENCTYPE al form para que sepa si va como texto plano o de otro formato...
Es importante saber desde donde recibes esto o qué lo genera:
value=<?php echo $_GET["ruta"];?>
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Última edición por loncho_rojas; 10/03/2016 a las 06:24
  #4 (permalink)  
Antiguo 10/03/2016, 08:37
 
Fecha de Ingreso: enero-2009
Mensajes: 173
Antigüedad: 10 años, 10 meses
Puntos: 1
Respuesta: PHP Mailer: Problemas en link con espacios en blanco

Estimados rbczgz y loncho,

Gracias por tomarse el tiempo para responder a mi consulta, Apliqué la primera sugerencia usando "str_replace" y solucioné el problema en que estaba. Ahora todo bien.

Etiquetas: blanco, espacios, formulario, html, link, mailer, variable
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:36.