segunda-feira, 20 de junho de 2011

Enviando emails com anexo em PHP

Para que este exemplo funcione corretamente é necessário que um servidor SMTP este configurado no arquivo php.ini

<?php

// criação do email
$to = "destino@dominio.com";
$from = "remetente@dominio.com";
$subject = "Enviado dia".date('d_m_Y');
$message = "Segue em anexo o arquivo pedido.";

// um hash randômico deve ser enviado com o conteúdo da mensagem
$separator = md5(time());

// tipo carriage return (usamos em PHP a constante de fim de linha)
$eol = PHP_EOL;

// nome do anexo que aparecerá no email
$filename = "arquivo_".date('d_m_Y').".txt";
// Abrindo o arquivo local para ser anexado
$arq = fopen("arquivo.txt","r");
//Calculando o tamanho do arquivo
fseek($arq,0,SEEK_END);
$tamanho = ftell($arq);

/*
*Coloque aqui um tratamento limitando o tamanho 
*do arquivo, pois os emails possuem um limite máximo
*para o tamanho do arquivo em anexo
*/

//Rebobiando o ponteiro do descritor do arquivo
rewind($arq);

//Carregando o arquivo para memório
$doc = fread($arq,$tamanho);
fclose($arq);

// codificando os dados (colocando o anexo no formato correto)
$attachment = chunk_split(base64_encode($doc));

// cabeçalho principal 
$headers = "From: ".$from.$eol;
$headers .= "MIME-Version: 1.0".$eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol.$eol;
$headers .= "Content-Transfer-Encoding: 7bit".$eol;
$headers .= "This is a MIME encoded message.".$eol.$eol;
 
// mensagem
$headers .= "--".$separator.$eol;
$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
$headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$headers .= $message.$eol.$eol;

// anexo
$headers .= "--".$separator.$eol;
$headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol;
$headers .= "Content-Transfer-Encoding: base64".$eol;
$headers .= "Content-Disposition: attachment".$eol.$eol;
$headers .= $attachment.$eol.$eol;
$headers .= "--".$separator."--";
 
// enviando a mensagem
if (!mail($to, $subject, "", $headers))
echo "Erro ao enviar arquivo. Favor Contate seu administrador!";
else
   echo "Email enviado com sucesso!";

?> 


Leandro Santos

Um comentário: