Foros del Web » Programando para Internet » PHP »

imagenes embebidas tinyMCE al enviar correo phpmailer

Estas en el tema de imagenes embebidas tinyMCE al enviar correo phpmailer en el foro de PHP en Foros del Web. Hola compadres, tengo un problema que me ha sacado mas de un dolor de cabeza.. Resulta que tengo una aplicación que enviar correos de maravilla, ...
  #1 (permalink)  
Antiguo 09/08/2013, 08:42
 
Fecha de Ingreso: diciembre-2012
Mensajes: 249
Antigüedad: 12 años
Puntos: 2
imagenes embebidas tinyMCE al enviar correo phpmailer

Hola compadres, tengo un problema que me ha sacado mas de un dolor de cabeza..
Resulta que tengo una aplicación que enviar correos de maravilla, estoy usando la clase phpmailer para el envio de correos, y estoy usando el tinyMCE para editar el contenido del correo,

El tinyMCE, tiene un textarea donde se agrega e contenido html que se va editando y en sus herramientas tiene un boton para agregar una imagen
la imagen esta guardada en una direccion como esta

http://mi.servidor.com/apps/elements/files/imagen.png

cuando le doy agregar imagen la imagen se agrega de manera correcta en el textarea de tinymce pero cuando la envio,el correo se envia pero la imagen no llega y me di cuenta es porque coge media ruta

/elements/files/imagen.png

Estuve investigando y dice que para enviar imagenes embebidas en el correo se debe usar la funcion
$mail->AddEmbeddedImage

pero como hago para pasarle los parametros si se trata del formato que se envia en el textarea del tiny?? y como hago si se envian por ejemplo 5 imagenes?? Alguna ayudita seria genial ya que no se que mas hacer o como normalmente los desarrolladores resulven este percance.. gracias!!
  #2 (permalink)  
Antiguo 09/08/2013, 09:36
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 8 meses
Puntos: 406
Respuesta: imagenes embebidas tinyMCE al enviar correo phpmailer

Lo mejor que puedes hacer es generar la ruta completa para que al abrir el correo se descargue del servidor ya que es mucho mas facil, en todo caso si aún quieres agregar la imagen como archivos adjuntos debes "parsear" el contenido del email para sustraer el nombre de la imagen para poder agregarlo como archivo adjunto, para eso puedes usar expresiones regulares, aparte de eso debes cambiar la ruta de la imagen para que el navegador/cliente sepa que se refiere a una imagen dentro del email...

Código PHP:
Ver original
  1. $html = <<<HTML
  2. <!doctype html>
  3. <html lang="en">
  4. <head>
  5.     <meta charset="UTF-8">
  6.     <title>Document</title>
  7. </head>
  8. <body>
  9.     <p><img src="/elements/files/imagen1.jpg" alt=""></p>
  10.     <p><img src="/elements/files/imagen2.jpg" alt=""></p>
  11.     <p><img src="/elements/files/imagen3.jpg" alt=""></p>
  12.     <p><img src="/elements/files/imagen4.jpg" alt=""></p>
  13.     <p><img src="/elements/files/imagen5.jpg" alt=""></p>
  14. </body>
  15. </html>
  16. HTML;
  17.  
  18. preg_match_all('/\/elements\/files\/(([a-zA-Z0-9_.-]+).(png|jpg|jpeg))/',$html,$imagenes);
  19.  
  20. $mail = new PHPMailer();
  21.  
  22. foreach($imagenes[0] as $img) {
  23.     if (file_exists($img)) {
  24.         /*
  25.          * aqui asegurate que el tipo de imagen corresponda al de la imagen
  26.          * ya que si no fallará, si es png debe ser imagen/png, si es bmp image/bmp o image/x-bmp
  27.          */
  28.         $tipo = 'image/jpeg';
  29.         $mail->AddEmbeddedImage($img,'cid','name','base64',$tipo);
  30.     }
  31. }

Por ultimo, también debes cambiar el HTML final, cambiando la ruta de la imagen por el CID de la imagen, OJO, MUY IMPORTANTE, cada imagen debe tener un CID único!
Código HTML:
Ver original
  1. <!doctype html>
  2. <html lang="en">
  3.     <meta charset="UTF-8">
  4.     <title>Document</title>
  5. </head>
  6.     <p><img src="cid:imagen1" alt=""></p>
  7.     <p><img src="cid:imagen2" alt=""></p>
  8.     <p><img src="cid:imagen3" alt=""></p>
  9.     <p><img src="cid:imagen4" alt=""></p>
  10.     <p><img src="cid:imagen5" alt=""></p>
  11. </body>
  12. </html>
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 09/08/2013, 11:10
 
Fecha de Ingreso: diciembre-2012
Mensajes: 249
Antigüedad: 12 años
Puntos: 2
Respuesta: imagenes embebidas tinyMCE al enviar correo phpmailer

wow muchas gracias por la respuesta, bueno lo que mas me llamo la atencion fue completar la url jejej sin embargoes una salida rapida, y si se cambia de servidor no va a funcionar para otros,Sin embargo para cabiar el CID de la imagen debo hacerlo manualmente? teniendo en cuenta que el usuario final no sabe nada de html.. perdon mi ignorancia y muchas gracias por la respuesta
  #4 (permalink)  
Antiguo 09/08/2013, 11:34
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 8 meses
Puntos: 406
Respuesta: imagenes embebidas tinyMCE al enviar correo phpmailer

Puedes automatizarlo, pero no esperes que te haga todo el código, puedes usar preg_replace() usando el patrón que deje en mi código anterior, y solo tomando el nombre de la imagen como CID, pero ojo de nuevo, cada imagen (diferente) debe tener su propio CID, por lo tanto deben tener diferente nombre, aun si están en diferentes carpetas...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 09/08/2013, 13:02
 
Fecha de Ingreso: diciembre-2012
Mensajes: 249
Antigüedad: 12 años
Puntos: 2
Respuesta: imagenes embebidas tinyMCE al enviar correo phpmailer

jeje ok muchas gracias!!

Etiquetas: correo, html, imagenes, phpmailer, tinymce
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 01:19.