Qual é a maneira correta de incorporar imagens phpmailer com um email html?

StackOverflow https://stackoverflow.com/questions/1158889

  •  18-09-2019
  •  | 
  •  

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 é.

  1. Página HTML
  2. 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?

Foi útil?

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 de file_get_contents) e trabalhar com os métodos de DOMDocument (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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top