Neste exemplo será mostrado como enviar e-mail com anexos em PHP de duas formas: usando a função mail() e usando o PHPMailer.
Usando a funcão mail()
Um email é composto de um cabeçalho e um corpo, sendo que o corpo pode ser separado em várias partes. No padrão o termo usado para identificar o separador destas partes é boundary
. Sendo assim vamos definir um boundary
para nosso email. As regras para gerar um boundary
pode ser encontrado na internet facilmente. Mas simplificando, nada mais é que uma string aleatória que deve aparecer no email apenas quando for para indicar uma parte do email.
$boundary = "XYZ-".md5(date("dmYis"))."-ZYX";
Obtenha as informações do arquivo que vai anexar
// Arquivo enviado via formulário
$path = $_FILES['attachment']['tmp_name'];
$fileType = $_FILES['attachment']['type'];
$fileName = $_FILES['attachment']['name'];
// Ou arquivo local
$path = '/caminho/para/o/arquivo';
$fileType = mime_content_type( $path );
$fileName = basename( $path );
// Pegando o conteúdo do arquivo
$fp = fopen( $path, "rb" ); // abre o arquivo enviado
$anexo = fread( $fp, filesize( $path ) ); // calcula o tamanho
$anexo = chunk_split(base64_encode( $anexo )); // codifica o anexo em base 64
fclose( $fp ); // fecha o arquivo
Definindo o cabeçalho (Existe outras informação importantes de cabeçalho que você pode adicionar para evitar que o email caia na caixa de SPAM).
// cabeçalho do email
$headers = "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-Type: multipart/mixed; ";
$headers .= "boundary=" . $boundary . PHP_EOL;
$headers .= "$boundary" . PHP_EOL;
Definição da mensagem em HTML
Aposte na Mega da Virada 2024!
Prepare-se para uma chance única de mudar sua vida. O prêmio histórico de R$ 600 milhões da Mega da Virada 2024 está esperando por você!
Além disso, conheça os bolões da Sorte Online, que são os mais premiados e oferecem as melhores chances de ganhar! Ao participar dos bolões, você se junta a centenas de apostadores e aumenta suas chances de faturar uma bolada.
Faça sua Aposta Agora$mensagem = "--$boundary" . PHP_EOL;
$mensagem .= "Content-Type: text/html; charset='utf-8'" . PHP_EOL;
$mensagem .= "Mensagem"; // Adicione aqui sua mensagem
$mensagem .= "--$boundary" . PHP_EOL;
Anexando um arquivo
$mensagem .= "Content-Type: ". $fileType ."; name=\"". $fileName . "\"" . PHP_EOL;
$mensagem .= "Content-Transfer-Encoding: base64" . PHP_EOL;
$mensagem .= "Content-Disposition: attachment; filename=\"". $fileName . "\"" . PHP_EOL;
$mensagem .= "$anexo" . PHP_EOL;
$mensagem .= "--$boundary" . PHP_EOL;
Enviando o email
mail($para, $assunto, $mensagem, $headers);
Usando o PHPMailer
Faça download do PHPMailer e extraia os arquivos na pasta de seu projeto.
Inclua o arquivo principal do PHPMailer
require_once('caminho/para/o/phpmailer/class.phpmailer.php');
Preparando o email
$email = new PHPMailer();
$email->From = 'nome@exemplo.com';
$email->FromName = 'Seu nome';
$email->Subject = 'Assunto';
$email->Body = 'Corpo do email';
$email->AddAddress( 'destinatario@exemplo.com' );
Anexando o arquivo
$file_to_attach = 'caminho/do/arquivo/para/anexo';
$email->AddAttachment( $file_to_attach , 'nome_do_arquivo.pdf' );
Enviando o email
$email->Send();
O PHPMailer reduz várias linhas de código para um simples comando $email->AddAttachment();
, bem mais simples! Usando o PHP puro será várias linhas a mais e provavelmente encontrará várias dificuldades e bugs.
VAI GOSTAR: