Enviar correo electrónico con PHPMailer - incrustar imagen en el cuerpo

97

Estoy intentando enviar correo HTML, con PHPMailer, con imágenes. El cuerpo se carga desde un archivo html, que contiene toda la información.

Al enviar el correo, la imagen no aparece en el cuerpo, aunque incluso envío la imagen también como adjunto.

La <img>etiqueta HTML apunta al mismo lugar que el lugar.

PHP:

$mail->AddAttachment('img/2u_cs_mini.jpg');

¿Cómo puedo hacer que el html apunte al archivo adjunto para que la imagen se pueda cargar en el cuerpo?

Mirando el ejemplo que viene con PHPMailer no noto ninguna diferencia, y en su caso sí aparece la imagen.

elvispt
fuente

Respuestas:

206

Encontré la respuesta:

$mail->AddEmbeddedImage('img/2u_cs_mini.jpg', 'logo_2u');

y en la <img>etiqueta ponersrc='cid:logo_2u'

elvispt
fuente
3
¡Eso ayuda perfectamente! Por curiosidad, ¿dónde encontraste esto? Por favor explique.
mtk
¿Por qué la barra invertida al final del cid?
Plummer
Hice esto hace tanto tiempo que no recuerdo si hubo siquiera una razón. No creo que lo haya. Lo más probable es que solo sea basura.
elvispt
8
Creo que la barra invertida se dejó allí por error de un código anterior que escapó de las comillas, como echo "src=\"cid:logo_2u\""y no creo que la barra invertida sea necesaria.
Cruel
8
Para quienes necesitan una explicación de un no experto: deben indicarle al motor de renderizado de dónde obtener la imagen y con qué protocolo (para usar una imagen adjunta, usa el protocolo de cid ", Content-ID). Y usa AddEmbeddedImage para dar una identificación al archivo adjunto para que pueda consultarlo (tenga en cuenta que pueden ser sonidos y otros tipos de archivos).
PhoneixS
3

Según el Manual de PHPMailer , la respuesta completa sería:

$mail->AddEmbeddedImage(filename, cid, name);
//Example
$mail->AddEmbeddedImage('my-photo.jpg', 'my-photo', 'my-photo.jpg '); 

Caso de uso:

$mail->AddEmbeddedImage("rocks.png", "my-attach", "rocks.png");
$mail->Body = 'Embedded Image: <img alt="PHPMailer" src="cid:my-attach"> Here is an image!';

Si desea mostrar una imagen con una URL remota:

$mail->addStringAttachment(file_get_contents("url"), "filename");
Marie-Eva BB Volmar
fuente