Enviando anexo com a função mail do Php
A função mail do Php por padrão não oferece um parâmetro para enviar anexos. Mas tem um jeito sim de enviar anexos através dela.
O código a seguir mostra exatamente como enviar arquivos anexo atraves da função mail:
$headers = “From: Eu \n”;
$headers .= “MIME-Version: 1.0\n”;
$headers .= “Content-Type: multipart/mixed; boundary=\”" . $boundary . “\”\n”;
$msg = “–” . $boundary . “\n”;
$msg .= “Content-Type: text/plain; charset=\”iso-8859-1\”\n”;
$msg .= “Content-Transfer-Encoding: quoted-printable\n\n”;
$msg .= “Aqui eu escrevo o texto do email\n”;
$msg .= “–” . $boundary . “\n”;
$msg .= “Content-Transfer-Encoding: base64\n”;
$msg .= “Content-Disposition: attachment; filename=\”imagem.gif\”\n\n”;ob_start();
readfile(”imagem.gif”);
$enc = ob_get_contents();
ob_end_clean();
$msg_temp = base64_encode($enc). “\n”;
$tmp[1] = strlen($msg_temp);
$tmp[2] = ceil($tmp[1]/76);for ($b = 0; $b <= $tmp[2]; $b++) {
$tmp[3] = $b * 76; $msg .= substr($msg_temp, $tmp[3], 76) . “\n”;
}
unset($msg_temp, $tmp, $enc);
mail(”para@email.com.br”, “Assunto”, $msg, $headers);
?>
Vamos a parte que nos interessa:
$msg .= “Content-Transfer-Encoding: base64\n”;
$msg .= “Content-Disposition: attachment; filename=\”imagem.gif\”\n\n”;
ob_start();
readfile(”imagem.gif”);
$enc = ob_get_contents();
ob_end_clean();
$msg_temp = base64_encode($enc). “\n”;
$tmp[1] = strlen($msg_temp);
$tmp[2] = ceil($tmp[1]/76);
for ($b = 0; $b <= $tmp[2]; $b++) {
$tmp[3] = $b * 76;
$msg .= substr($msg_temp, $tmp[3], 76) . “\n”;
}
Esta parte define a imagem em si! Primeiramente eu envio os identificadores de anexo, com o nome do anexo. Mais embaixo, eu pego o conteúdo do arquivo ( readfile(”imagem.gif”); ) e o encripto com o base64 (formato padrão dos anexos no email!).
É nessa parte que tem que se tomar cuidado, pois pelo RFC as linhas do email não podem ser muito grandes. Por isso o FOR “quebra” o conteudo do arquivo em pedaços de 76 caracteres!
Pronto, com esse script seu form ira enviar email com anexo.
Até a próxima!
Fonte: Php Brasil