Foros del Web » Programando para Internet » PHP »

Error al mostrar imágenes en correo phpmailer

Estas en el tema de Error al mostrar imágenes en correo phpmailer en el foro de PHP en Foros del Web. Hola. Estoy enviando varios correos por phpmailer sin embargo en algunos correos no termina de mostrar las imágenes como por ejemplo en gmail o yahoo. ...
  #1 (permalink)  
Antiguo 31/01/2019, 04:46
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.928
Antigüedad: 16 años, 5 meses
Puntos: 62
Error al mostrar imágenes en correo phpmailer

Hola.

Estoy enviando varios correos por phpmailer sin embargo en algunos correos no termina de mostrar las imágenes como por ejemplo en gmail o yahoo.

Lo estoy haciendo de esta manera:

Código PHP:
/*=============================================
VERIFICACIÓN DE CORREO ELECTRÓNICO PHPMAILER    
=============================================*/    
                        

    //$url = "https://www.url.com/";                        

    
date_default_timezone_set("Europe/Madrid");

    
$url Ruta::ctrRuta();

    
//echo "Por ahora la url es: ".$url;

    
$mail = new PHPMailer;

    
$mail->CharSet 'UTF-8';

    
$mail->isMail();

    
$mail->setFrom('[email protected]''título');            

    
$mail->addReplyTo('[email protected]''Ttítulo');        

    
$mail->Subject "¡Confirma tu direccion de email!";

    
$mail->addAddress($_POST["emailNewsletter"]);    

        
//Prueba con ruta entera de la imagen.
    
$imagen1 '<img src="https://www.url.com/views/images/imagen.jpg" alt="Ttitulo" class="img-newsletter">';                    

    
$mail->msgHTML('    

        <img src="'
.$url.'views/images/imagen.jpg" alt="Titulo" class="img-newsletter">
        <p>Otra prueba de imagen con la ruta entera directa</p>
                            '
.$imagen1.'
                
    '
);

    
//Prueba de imagen adjunta.
    
$mail->AddAttachment("https://www.url.com/views/images/imagen.jpg");        
    
    
$envio $mail->Send();
                            
    
//Si no se envía phpmailer
    
if(!$envio){

        
//Error en la verificación
        
echo '<p class="alerta-confirmacion">!Error al verificar newsletter a tu dirección de correo electrónico!</p>';

        echo 
$_POST["regEmail"].$mail->ErrorInfo.'!';
                    

    }
    
//Confirmación de correo enviado al usuario
    
else{
        
//Si se envía phpmailer y va todo bien                                
                                
        
echo '<p class="alerta-confirmacion">!No olvides verificar tu dirección de correo electrónico para confirmar tu registro!</p>';
                            
    } 
Aquí solo he puesto la parte del código que afecta a esa zona como ejemplo, donde he probado con la variable $url que es igual a la ruta entera del servidor, también con $imagen1 donde meto la ruta entera de img incluyendo la ruta entera de la image e incluso con una imagen de prueba adjunta y ninguna de las tres funciona.

¿Qué esto haciendo mal?

Saludos.
  #2 (permalink)  
Antiguo 31/01/2019, 11:50
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.442
Antigüedad: 11 años, 5 meses
Puntos: 1066
Respuesta: Error al mostrar imágenes en correo phpmailer

En el código que muestras te falta agregar
Código PHP:
Ver original
  1. $mail->IsHTML(true);

Si no lo agregas enviá el email como texto plano
  #3 (permalink)  
Antiguo 06/02/2019, 12:11
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.928
Antigüedad: 16 años, 5 meses
Puntos: 62
Respuesta: Error al mostrar imágenes en correo phpmailer

Hola de nuevo ArturoGallegos.

La verdad es que probé tu opción y seguía sin ir bien, sin embargo me dio por probar con otra imagen alojada fuera del servidor actual y ví que si cargaba, es decir que el problema estaba en nuestro servidor.

Por ahora tal y como está el código mío anterior ya con msgHTML va correctamente, solo nos falta arreglar ese problema con el servidor y listo.

De nuevo muchas gracias, un saludo.
  #4 (permalink)  
Antiguo 06/02/2019, 14:47
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.442
Antigüedad: 11 años, 5 meses
Puntos: 1066
Respuesta: Error al mostrar imágenes en correo phpmailer

Posiblemente el problema del servidor es porque tienes activado "Hotlink Protection" o "proteccion de vinculo directo" según el idioma de tu cpanel

Esto previene que utilicen tus imágenes y archivos en otro sitio web ajeno a ti y se cuelguen de tu ancho de banda contratado, o inclusive que se vea afectado el tiempo de respuesta del server por estar haciendo un uso exhaustivo de estos archivos en otros sitios.

Busca la opción en el cPanel y desactivala, si funciona con eso has de explicar a tu cliente pros y contras para que tomen una decisión
  #5 (permalink)  
Antiguo 06/02/2019, 16:51
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.928
Antigüedad: 16 años, 5 meses
Puntos: 62
Respuesta: Error al mostrar imágenes en correo phpmailer

Pues la verdad pensaba lo mismo, creía que iba ser de un tema de "Hotlink Protection" sin embargo a última hora probando esta opción sin poner https y poniendo la ruta de imágenes normal parece que funciona correctamente en los dos casos.

Código PHP:
Ver original
  1. $mail->msgHTML('    
  2.  
  3.        <img src="views/images/imagen.jpg" alt="Titulo" class="img-newsletter">
  4.                        
  5.    ');
  6.  
  7.     //Prueba de imagen adjunta.
  8.     $mail->AddAttachment("views/images/imagen.jpg");

No sé si con https sigue teniendo ese problema por ese error que citas de evitar vínculos directos a otras páginas así que esa parte tendré que volver a revisarla bien y consultarla en el servidor. Pero como indico en el ejemplo así ya funciona correctamente.

De nuevo gracias, saludos.

Etiquetas: correo, funcion, html, phpmailer, url, 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 11:19.