Enviar e-mails com anexos utilizando PHP

Enviar e-mails com anexos utilizando PHP

Neste artigo vamos ver como é possível fazer o envio de e-mails com anexo utilizando PHP. Vamos ver dois exemplos de como fazer isso, um utilizando uma função nativa do PHP e outra utilizando uma biblioteca.

O que você vai aprender neste artigo?

 

* Enviar e-mail com anexo utilizando a função mail().

* Enviar e-mail com anexo utilizando a biblioteca PHPMailler.

 

Usando a funcão mail()

 

Uma mensagem de email é composta de um cabeçalho e um corpo, sendo que o corpo da mensagem pode ser separado em várias partes. 

Cada parte da mensagem é separada por um boundary. O boundary é uma string aleatória que deve aparecer no email apenas quando for para indicar uma parte do email.

O PHP possui uma função chamada mail() utilizada para o envioa de mensagens de e-mail. Sua sintaxe é a seguinte:

 

mail(destinatario, assunto, mensagem, cabecalhos);

 

Seus parâmetros são:

- Destinatario: O e-mail que deve receber a mensagem.

- Assunto: O assunto da mensagem.

- Mensagem: O conteúdo da mensagem.

- Cabeçalhos: Cabeçalhos do e-mail.

 

Observação: O remetente de um e-mail deve ser um e-mail válido no domínio.

Vamos começar definindo o cabeçalho da mensagem e a mensagem a ser enviada:

 

$destinatario = "destinatario@teste.com.br";

$remetente = "remetente@teste.com.br"; 

//Cabeçalho da mensagem

$boundary = "XYZ-" . date("dmYis") . "-ZYX";

$headers = "MIME-Version: 1.0" . PHP_EOL;

$headers .= "Content-Type: multipart/mixed; ";

$headers .= "boundary=" . $boundary . PHP_EOL;

$headers .= "$boundary" . PHP_EOL;

$conteudo_mensagem = "Mensagem para testar o envio de anexos com PHP";

 

Perceba que para criar o boundary foi utilizada a data no formato dia mes ano minutos e segudos, junto com uma string de prefixo e sufixo;

Agora vamos abrir um arquivo local e guardar seu conteúdo numa variável chamada "anexo".

 

$caminho = "/caminho_para_o_arquivo";

$tipoArquivo = mime_content_type($caminho);

$nomeArquivo = basename($caminho);

$fp = fopen( $caminho, "rb" ); 

$anexo = fread( $fp, filesize($caminho)); 

$anexo = chunk_split(base64_encode($anexo)); 

fclose( $fp ); 

 

As funções que utilizamos para abrir o anexo foram:

- mime_content_type: Informa qual o MIME type do arquivo. MIME significa Multipurpose Internet Mail Extension, ele é um padrão que define o tipo de arquivo.

- basename: Ao informar o caminho do arquivo, retorna apenas o nome do arquivo.

- fopen: Abre um arquivo.

- fread: Faz a leitura de um arquivo até uma determinada posição, em nosso exemplo ele faz a leitura do arquivo até o seu final.

- filesize: Retorna o tamanho do arquivo em bytes.

- chunk_split: Divide uma string em pequenos pedaços para facilitar o envio.

- base64_encode: Codifica o anexo no formato base64.

- fclose: Fecha um arquivo.

Agora vamos configurar a mensagem. Precisamos de dois boundaries, um para o texto da mensagem e outro para o anexo que vamos enviar.

 

$mensagem = "--$boundary" . PHP_EOL;

$mensagem .= "Content-Type: text/html; charset=\\'utf-8\\'" . PHP_EOL;

$mensagem.= "$conteudo_mensagem";

$mensagem .= "--$boundary" . PHP_EOL;

$mensagem .= "Content-Type: ". $tipoArquivo ."; name=\"". $nomeArquivo . "\"" . PHP_EOL;

$mensagem .= "Content-Transfer-Encoding: base64" . PHP_EOL;

$mensagem .= "Content-Disposition: attachment; nomeArquivo=\"". $nomeArquivo . "\"" . PHP_EOL;

$mensagem .= "$anexo" . PHP_EOL;

$mensagem .= "--$boundary" . PHP_EOL;

if(mail($destinatario, $assunto, $mensagem, $headers)) {

echo "Mensagem enviada com sucesso!";

} else {

echo "Ocorreu um erro ao enviar a mensagem!";

}

 

 

Usando a biblioteca PHPMailler()

 

Como você viu, utilizar a funçao mail() para enviar um arquivo é algo muito trabalhoso. Uma forma mais fácil de mandar e-mails com anexo é utilizar a biblioteca PHPMailler. Você pode baixar esta biblioteca a partir deste link:

 

https://github.com/PHPMailer/PHPMailer

 

Primeiro você precisa incluir a biblioteca no seu script e criar um objeto com as configurações do e-mail.

 

require_once("caminho_para_o_phpmailer/class.phpmailer.php");

$email = new PHPMailer();

$email->IsHTML(true);

$email->SMTPDebug = 0;

 

As seguintes opções foram configuradas:

 

- IsHTML: Ao ser definido como true, ativa o envio de conteúdo em HTML na sua mensagem.

- SMTPDebug: Ativa o modo de debug, ao marcar zero ele é desativado. As opções são de 1 a 4, sendo 1 e 2 as mais comuns para ver erros no envio e as opções 3 e 4 são utilizadas quando não é possível estabelecer conexão com o servidor de e-mail.

 

A seguir você precisa informar as configurações do seu serviço de e-mail.

 

$email->IsSMTP(); 

$email->Port = ""; 

$email->setFrom("email@email.com.br", "Nome do remetente");

$email->Host = "";

$email->SMTPAuth = true; 

$email->Username = "nome do usuario"; 

$email->Password = "senha";

 

Nas configurações do seu serviço de e-mail, você tem as seguintes opções:

 

- IsSMTP(): Define que a mensagem será enviada por SMTP.

- Port: Porta do servidor SMTP.

- setFrom: Endeço de e-mail do remetente e nome de exibição.

- Host: Endereço do servidor SMTP.

- SMTPAuth: Quando o servidor exige autenticação para disparo do e-mail deve ser informada a opçao true e o username e password devem ser informados.

- Username: Usuário do servidor SMTP.

- Password: Senha da caixa postal utilizada para o disparo do e-mail.

 

Uma vez configurada a forma de enviar o e-mail, você precisa configurar a mensagem a ser enviada

 

$email->From = "nome@exemplo.com.br";

$email->FromName  = "Seu nome";

$email->Subject   = "Assunto";

$email->Body      = "Corpo do email";

$email->AddAddress("destinatario@exemplo.com.br" );

$anexo = "caminho_do_arquivo_a_se_anexado";

$email->AddAttachment( $anexo , "nome_do_arquivo_e_extensao" );

if (!$email->send()) {

echo "Erro: " . $email->ErrorInfo;

} else {

echo "Mensagem enviada com sucesso!";

}

$email->Send();

 

Para o envio da mensagem as seguintes configurações são necessárias: 

 

- From: E-mail do remetente.

- FromName: Nome do remetente.

- Subject: Assunto do e-mail.

- Body: Mensagem a ser enviada.

- AddAddress: Endereço de e-mail que deve receber a mensagem.

- AddAttachment: Adiciona um anexo.

- Send(): Envia a mensagem.

 

 

Outros conteudos que podem ser de seu interesse

Manipulando datas com PHP
08/11/2020PHP

Manipulando datas com PHP

Veja várias formas de trabalhar com datas no PHP

Saiba mais...
Combinação e sorteio de números com PHP
10/11/2024PHP

Combinação e sorteio de números com PHP

Veja exemplos práticos de combinações e sorteio de números com PHP

Saiba mais...
Converter arquivo texto em JSON com PHP
08/10/2019PHP

Converter arquivo texto em JSON com PHP

Aprenda uma forma simples de converter um arquivo texto em JSON usando PHP

Saiba mais...

Conteúdo sobre banco de dados sem complicação!


Warning: Cannot modify header information - headers already sent by (output started at /home/storage/f/7d/a9/dbins/public_html/blog/post.php:101) in /home/storage/f/7d/a9/dbins/public_html/blog/ga4_track.php on line 11