Enviar e-mail com PHPMailer - imagem incorporada no corpo

97

Estou tentando enviar e-mail em HTML, com PHPMailer, com imagens. O corpo é carregado de um arquivo html, que contém todas as informações.

Ao enviar o e-mail, a imagem não aparece no corpo, embora eu até envie a imagem também como anexo.

A <img>tag HTML aponta para o mesmo local que o local.

PHP:

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

Como posso fazer o html apontar para o anexo para que a imagem possa ser carregada no corpo.

Olhando para o exemplo que vem com o PHPMailer não noto nenhuma diferença, e no caso deles a imagem aparece.

elvispt
fonte

Respostas:

206

Eu encontrei a resposta:

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

e na <img>tag colocarsrc='cid:logo_2u'

elvispt
fonte
3
Isso ajuda perfeitamente !!! Por curiosidade, onde você encontrou isso? Por favor explique.
mtk
Por que a barra invertida no final do cid?
Plummer
Eu fiz isso há muito tempo, não me lembro se havia um motivo. Acho que não. Provavelmente apenas algum lixo.
elvispt
8
Acredito que a barra invertida foi deixada lá por engano em um código anterior que escapou de aspas, como echo "src=\"cid:logo_2u\""e não acredito que a barra invertida seja necessária.
Cruel
8
Para quem precisa de uma explicação de um não especialista: você precisa dizer ao mecanismo de renderização de onde obter a imagem e com qual protocolo (para usar uma imagem anexada você usa o protocolo decid ", Content-ID). E você usa AddEmbeddedImage para fornecer um id ao anexo para que você possa consultá-lo (observe que podem ser sons e outros tipos de arquivos).
PhoneixS
3

De acordo com o Manual do PHPMailer , a resposta completa seria:

$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!';

Se você deseja exibir uma imagem com um URL remoto:

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