Email com vários anexos em PHP Mail()

• Publicado em: fevereiro 11, 2014

Hoje me deparei com uma situação diferenciada (BUCHO) pelo menos pra mim que sei apenas o básico de PHP e a situação é seguinte, tinha um formulário de contato que precisaria enviar dois documentos em anexo.

 

Nesse código abaixo não vou explicar não porque já fiz bem comentado e ele é bem simples basta colocar que ele vai funcionar, salvo que ele precisa de se ajustar para seu formulário com o corpo de email pode ter mais compus que é só acrescentar e caso queira adicionar mais input[file] basta acrescentar mais e não precisa fazer mais nada, já que o código pegar em forma de laço todos os input[file] do documento todo.

 

[code lang=”php”]
<?php
/**
* Autor: Rômulo Brasil – romulobrasil.com
* Email com vários anexos em PHP Mail()
*/
if ($_SERVER[‘REQUEST_METHOD’]=="POST"){
//E-mail que receberar os e-mails com anexos.
$to="seu@email.com.br";

//Assunto do E-mail Enviado
$subject="Teste de anexo";

//Mensagem que irar no corpo do e-mail
$message="Texto enviado com o anexo";

//Pega o Remetente
$from = stripslashes($_POST[‘fromname’])."<".stripslashes($_POST[‘fromemail’]).">";

//Cabeçalho do E-mail
$mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";
$headers = "From: $from\r\n" .
"MIME-Version: 1.0\r\n" .
"Content-Type: multipart/mixed;\r\n" .
" boundary=\"{$mime_boundary}\"";

//Complemento da mensagem MIME que detecta o formato dos arquivos.
$message = "This is a multi-part message in MIME format.\n\n" .
"–{$mime_boundary}\n" .
"Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$message . "\n\n";

//Laço que detecta todos os input[file]
foreach($_FILES as $userfile){
$tmp_name = $userfile[‘tmp_name’];
$type = $userfile[‘type’];
$name = $userfile[‘name’];
$size = $userfile[‘size’];

//Abre e lê o arquivo e add na variável $data
if (file_exists($tmp_name)){
if(is_uploaded_file($tmp_name)){
$file = fopen($tmp_name,’rb’);
$data = fread($file,filesize($tmp_name));
fclose($file);
$data = chunk_split(base64_encode($data));
}

//Add o arquivo a variável $message
$message .= "–{$mime_boundary}\n" .
"Content-Type: {$type};\n" .
" name=\"{$name}\"\n" .
"Content-Disposition: attachment;\n" .
" filename=\"{$fileatt_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n";
}
} //endforeach

$message.="–{$mime_boundary}–\n";
mail($to, $subject, $message, $headers);
}
?>

<!doctype html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Email com Varios Anexos – PHP</title>
</head>
<body>

<form action="<?php echo $_SERVER[‘PHP_SELF’]; ?>" method="POST" enctype="multipart/form-data">
De: <input type="text" name="fromname" value=""> <br>
Para: <input type="text" name="fromemail" value=""> <br>
anexos: <br>
<input type="file" name="file1" value=""> <br>
<input type="file" name="file2" value=""> <br>
<input type="file" name="file3" value=""> <br>
<input type="submit" value="Enviar">
</form>

</body>
</html>
[/code]

VLW!!!