Qual é a maneira correta de incorporar imagens phpmailer com um email html?
Pergunta
Quero enviar um boletim informativo com o Phpmailer. O boletim funciona, mas estou me perguntando se existe uma opção melhor para fazer isso.
O que eu tenho é.
- Página HTML
- Imagens
Agora meu código parece o seguinte
$mail = new PHPMailer();
//Adding the body
$body = file_get_contents('template/index.htm');
$mail->Subject = "PHPMailer Test Subject via mail(), basic";
$mail->AltBody = "To view this message, please use an HTML compatible email viewer!";
$mail->SetFrom('xxxxxxx', 'xxxxxxxxxx');
$address = ".......@gmail.com";
$mail->AddAddress($address, "xxxxxxx");
$mail->AddEmbeddedImage("template/images/bullet_point.gif","1");
$mail->AddEmbeddedImage("template/images/template_1_01.gif","2");
$mail->AddEmbeddedImage("template/images/template_1_03.gif","3");
$mail->MsgHTML($body);
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
Eu uso o FILE_GET_CONTENTS para obter a página HTML e AddEmbededImage nas imagens de incorporação, agora existe uma maneira de passar apenas a página HTML para Phpmailer e que o PHP Mailer incorporará essas imagens automaticamente?
Solução
Eu não acho que o que você está tentando fazer é possível (adicionando automaticamente imagens necessárias) com phpmailer "do zero".
Talvez você possa analisar o HTML para obter a lista de imagens às quais se vincula? Existem pelo menos 2 maneiras de fazer isso:
- usando rexexes; Geralmente não é a melhor maneira de fazer as coisas se você estiver tentando extrair dados do HTML - e você é ^^
- Outra (provavelmente) maneira melhor seria usar
DOMDocument::loadHTML
No conteúdo HTML carregado do seu arquivo (a saída defile_get_contents
) e trabalhar com os métodos deDOMDocument
(e porque não,DOMXPath
?)
Para obter as imagens, suponho que você tenha <img>
tags em seu e-mail, com src
atributos ; O objetivo é encontrar os valores desses ;-)
Depois de ter o caminho da lista de imagens, você itera sobre elas e liga $mail->AddEmbeddedImage
em cada um deles.
Suponho que funcionaria muito bem (não tentei, mas não vejo por que não seria.
Como nota lateral, a outra maneira seria manter as imagens no seu servidor por alguns dias/semanas/meses e não incluí -las no correio; Isso tornaria os e -mails menores, o que significa:
- Menos bandwith gasto de lado (se você está enviando muitos e -mails, pode representar um pouco de banda com banda)
- Menos bandwith gasto em cada um dos seus clientes - o que é bom para eles também ^^
- menos espaço usado em seus discos duros ;-)
E para garantir que as imagens não sejam apagadas / substituídas no servidor antes de algumas semanas / mês, você pode criar um novo diretório para cada boletim, contendo suas imagens - e de vez em quando, exclua os diretórios mais antigos do que X
dias.