Página do Formulário:
Essa é uma página simples e nem preciso explicar, ela só tem um Javascript no começo que verifica se os campos necessários foram preenchidos e o resto é XHTML com CSS.
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="JavaScript" type="text/JavaScript">
function checa_formulario(email){
if (email.nome.value == ""){
alert("Por Favor nao deixe o seu nome em branco!!!");
email.nome.focus();
return (false);
}
if (email.email_from.value == ""){
alert("Por Favor nao deixe o seu email em branco!!!");
email.email_from.focus();
return (false);
}
if (email.email.value == ""){
alert("Nao deixe o email destinatario em branco!!!");
email.email.focus();
return (false);
}
if (email.assunto.value == ""){
alert("Nao deixe o assunto em branco!!!");
email.assunto.focus();
return (false);
}
}
</script>
<title>Formulário de Envio de Email</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
<!--
.titulo {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: bold;
color: #003399;
}
.texto {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #000000;
border: thin dashed #CCCCCC;
}
-->
</style>
</head>
<body onload="document.email.nome.focus();">
<table width="500" height="128" border="0" cellpadding="0" cellspacing="0" bordercolor="#CCCCCC">
<tr>
<td height="21"><p class="titulo">Formulário de Envio de Email</p></td>
</tr>
<tr>
<td height="107">
<form action="envia.php" method="post" enctype="multipart/form-data" name="email" id="email" onsubmit="return checa_formulario(this)">
<table width="500" border="0" cellpadding="0" cellspacing="0" bordercolor="#CCCCCC" class="texto">
<tr>
<td width="250" height="20" align="center" valign="middle">Seu nome:
<input name="nome" type="text" id="nome" size="25" /></td>
<td width="250" height="30" align="center" valign="middle">Seu email:
<input name="email_from" type="text" id="email_from" size="25" /></td>
</tr>
<tr align="center" valign="middle">
<td height="30" colspan="2">Email do destinatário:
<input name="email" type="text" id="email" size="56" /></td>
</tr>
<tr align="center" valign="middle">
<td height="30" colspan="2">Assunto:
<input name="assunto" type="text" id="assunto" size="68" /></td>
</tr>
<tr align="center" valign="middle">
<td height="100" colspan="2">Mensagem:
<textarea name="mensagem" cols="50" rows="5" id="mensagem"></textarea></td>
</tr>
<tr align="center" valign="middle">
<td height="30" colspan="2">Arquivo:
<input name="arquivo" type="file" id="arquivo" size="48" /></td>
</tr>
<tr align="center" valign="middle">
<td height="28" colspan="2"><input name="enviar" type="submit" id="enviar" value="Enviar" />
<input name="apagar" type="reset" id="apagar" value="Apagar" /></td>
</tr>
</table>
</form>
</td>
</tr>
</table>
</body>
</html>
Agora a página de envio. (nomei-a como envia.php ou altere a página acima)
Página de Envio
<?
//pega os dados enviados pelo usuário
$nome = $_POST["nome"];
$body = $_POST["mensagem"];
$to = $_POST["email"];
$from = $_POST["email_from"];
$subject = $_POST["assunto"];
$attach = $_FILES["arquivo"]["tmp_name"];
$attach_name = $_FILES["arquivo"]["name"];
$attach_size = $_FILES["arquivo"]["size"];
$attach_type = $_FILES["arquivo"]["type"];
//verifica se o email do destinatário é válido
if (!ereg("^([0-9,a-z,A-Z]+)([.,_]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])?$", $to)){
echo"<center>Digite um email valido</center>";
echo "<center><a href=\"java script:history.go(-1)\">Voltar</center></a>";
exit;
}
//verifica se o email do remetente é válido
if (!ereg("^([0-9,a-z,A-Z]+)([.,_]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])?$", $from)){
echo "<center>Digite um email valido</center>";
echo "<center><a href=\"java script:history.go(-1)\"><center>Voltar</center></a>";
exit;
}
//define os headers de envio
$mailheaders = "From: \"$nome\" <$from>\r\n";
$mailheaders .= "Reply-To: $from\n";
//e define a mensagem tirando barras para evitar problemas no script
$msg_body = stripslashes($body);
//verifica se tem arquivo anexo, o if é se tiver e o else se não tiver anexo
if ($attach !=null)
{
//abre o arquivo para codificá-lo no formato de email
$file = fopen($attach, "r");
$contents = fread($file, $attach_size);
$encoded_attach = chunk_split(base64_encode($contents));
fclose($file);
//define os headers do anexo e da mensagem
$mailheaders .= "MIME-version: 1.0\n";
$mailheaders .= "Content-type: multipart/mixed; ";
$mailheaders .= "boundary=\"Message-Boundary\"\n";
$mailheaders .= "Content-transfer-encoding: 7BIT\n";
$mailheaders .= "X-attachments: $attach_name";
$body_top = "--Message-Boundary\n";
$body_top .= "Content-type: text/plain; charset=US-ASCII\n";
$body_top .= "Content-transfer-encoding: 7BIT\n";
$body_top .= "Content-description: Mail message body\n\n";
$msg_body = $body_top . $msg_body;
$msg_body .= "\n\n--Message-Boundary\n";
$msg_body .= "Content-type: $attach_type; name=\"$attach_name\"\n";
$msg_body .= "Content-Transfer-Encoding: BASE64\n";
$msg_body .= "Content-disposition: attachment; filename=\"$attach_name\"\n\n";
$msg_body .= "$encoded_attach\n";
$msg_body .= "--Message-Boundary--\n";
//envia o email para as variáveis já definidas e tratadas e mostra mensagem de sucesso
mail($to, stripslashes($subject), $msg_body, $mailheaders);
echo"Enviado com Sucesso!";
echo"<br>";
echo"<a href=\"home.php\">Voltar para página Principal</a>";
}
else{
//se não tiver anexo ele envia só a mensagem com esses headers
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: \"$nome\" <$from>\r\n";
mail($to, stripslashes($subject), $msg_body, $mailheaders);
echo"Enviado com Sucesso!";
echo"<br>";
echo"<a href=\"home.php\">Voltar para página Principal</a>";
}
?>
Bom, o código tá cheio de comentários (que eu fiz questão de formatar na mão mesmo pra ficar mais fácil de visualizar). Mesmo assim vamos lá:
Essa página recebe os dados e coloca em variáveis (parte do $_POST), depois verifica através do comando "ereg" os caracteres para evitar que pessoas coloquem emails inválidos. Ae é executada uma condicional (if), ou seja, se a variável $attach tiver valor (!=null, != significa diferente e null é considerado nulo, no caso ela tem que ser diferente de nulo) ele abre o arquivo e codifica com o base_encode64 que é o formato dos emails e adiciona os headers (cabeçalhos) na mensagem enviando através da função mail() e exibe mensagem de sucesso. Mas no caso de não existir anexo ele simplesmente colocar os cabeçalhos de uma mensagem normal e envia.
Retirado do site:
wmonline.com.br