Enviando e-mails com anexo em PHP

Enviando e-mails com anexo em PHP

Atenção. Antes de realizar qualquer envio, por favor siga nossas recomendações, dessa forma evitará problemas ao enviar suas mensagens.

Right-arrow-32.png Primeiro criaremos o formulário (em HTML) onde será anexado o arquivo e colocadas as informações para preenchimento dos dados.

Arquivo: index.html

<html>
<head>
<script language=“javascript”>function checa_formulario(email){
if (email.nome_para.value == “”){
alert(“Por Favor nao deixe o nome em branco!!!”);
email.nome.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>Enviando texto</title>
<meta httpequiv=“Content-Type” content=“text/html; charset=iso-8859-1”>
<style type=“text/css”>
<!–
.email {
texttransform: lowercase;
}
.texto {
color: #0000FF
}
.style1 {color: #FF0000}

–>
</style>
</head>

<body onLoad=“document.email.nome.focus();”>
<form onsubmit=“return checa_formulario(this)” action=“envia.php” method=“post” enctype=“multipart/form-data” name=“email”>
<h1 align=“center” class=“style1”>Formulário de email com anexo </h1>
<table width=“50%” border=“0” align=“center”>
<tr>
<td><div align=“right”><span class=“texto”>Nome do destinatario:</span></div></td>
<td><input name=“nome_para” type=“text” id=“nome_para”></td>
</tr>
<tr>
<td><div align=“right” class=“texto”>Email de destino</div></td>
<td><input name=“email” type=“text” class=“email”>
</tr>
<tr>
<td><div align=“right” class=“texto”>Assunto</div></td>
<td><input name=“assunto” type=“text” id=“assunto”></td>
</tr>
<tr>
<td><div align=“right” class=“texto”>Mensagem</div></td>
<td><textarea name=“mensagem” cols=“50” rows=“10” id=“mensagem”></textarea></td>
</tr>
<tr>
<td><div align=“right” class=“texto”>Anexo</div></td>
<td><input name=“arquivo” type=“file”></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type=“submit” name=“Submit” value=“Enviar”></td>
</tr>
</table>
</form>
</body>
</html>

Arquivo: envia.php

<?php

//Pega os dados postados pelo formulário HTML e os coloca em variaveis
if (eregi(‘tempsite.ws$|hostlife.com.br$|hospedagemdesites.ws$|websiteseguro.com$’, $_SERVER[HTTP_HOST])) {
//substitua na linha acima a aprte hostlife.com.br por seu domínio.
$email_from=‘email@seudominio’; // Substitua essa linha pelo seu e-mail@seudominio
}else {
$email_from = “email@” . $_SERVER[HTTP_HOST];
// Na linha acima estamos forçando que o remetente seja ‘webmaster@’,
// você pode alterar para que o remetente seja, por exemplo, ‘contato@’.
}

if( PATH_SEPARATOR ==‘;’){ $quebra_linha=\r\n;

} elseif (PATH_SEPARATOR==‘:’){ $quebra_linha=\n;

} elseif ( PATH_SEPARATOR!=‘;’ and PATH_SEPARATOR!=‘:’ ) {echo (‘Esse script não funcionará corretamente neste servidor, a função PATH_SEPARATOR não retornou o parâmetro esperado.’);

}

//pego os dados enviados pelo formulário
$nome_para = $_POST[“nome_para”];
$email = $_POST[“email”];
$mensagem = $_POST[“mensagem”];
$assunto = $_POST[“assunto”];
//formato o campo da mensagem
$mensagem = wordwrap( $mensagem, 50, “<br>”, 1);

//valido os emails
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])?$”, $email)){

echo“<center>Digite um email valido</center>”;
echo “<center><a href=\”javascript:history.go(-1)\”>Voltar</center></a>”;
exit;

}

$arquivo = isset($_FILES[“arquivo”]) ? $_FILES[“arquivo”] : FALSE;

if(file_exists($arquivo[“tmp_name”]) and !empty($arquivo)){

$fp = fopen($_FILES[“arquivo”][“tmp_name”],“rb”);
$anexo = fread($fp,filesize($_FILES[“arquivo”][“tmp_name”]));
$anexo = base64_encode($anexo);

fclose($fp);

$anexo = chunk_split($anexo);

$boundary = “XYZ-“ . date(“dmYis”) . “-ZYX”;

$mens = “–$boundary . $quebra_linha . “”;
$mens .= “Content-Transfer-Encoding: 8bits” . $quebra_linha . “”;
$mens .= “Content-Type: text/html; charset=\”ISO-8859-1\” . $quebra_linha . “” . $quebra_linha . “”; //plain
$mens .= $mensagem . $quebra_linha . “”;
$mens .= “–$boundary . $quebra_linha . “”;
$mens .= “Content-Type: “.$arquivo[“type”].“” . $quebra_linha . “”;
$mens .= “Content-Disposition: attachment; filename=\”.$arquivo[“name”].\” . $quebra_linha . “”;
$mens .= “Content-Transfer-Encoding: base64” . $quebra_linha . “” . $quebra_linha . “”;
$mens .= $anexo . $quebra_linha . “”;
$mens .= “–$boundary–“ . $quebra_linha . “”;

$headers = “MIME-Version: 1.0” . $quebra_linha . “”;
$headers .= “From: $email_from . $quebra_linha . “”;
$headers .= “Return-Path: $email_from . $quebra_linha . “”;
$headers .= “Content-type: multipart/mixed; boundary=\”$boundary\” . $quebra_linha . “”;
$headers .= $boundary . $quebra_linha . “”;

//envio o email com o anexo
mail($email,$assunto,$mens,$headers, “-r”.$email_from);

echo“Email enviado com Sucesso!”;

}

//se nao tiver anexo
else{

$headers = “MIME-Version: 1.0” . $quebra_linha . “”;
$headers .= “Content-type: text/html; charset=iso-8859-1” . $quebra_linha . “”;
$headers .= “From: $email_from . $quebra_linha . “”;
$headers .= “Return-Path: $email_from . $quebra_linha . “”;

//envia o email sem anexo
mail($email,$assunto,$mensagem, $headers, “-r”.$email_from);

echo“Email enviado com Sucesso!”;
}

?>

-> Envio em PHP 5.3

Para rodar o formulário em PHP 5.3, algumas alterações deverão ser realizadas, devido a perda de algumas funções nessa versão do mesmo!

Mudanças a serem realizadas:

Na linha 4:

if (eregi(‘tempsite.ws$|hostlife.com.br$|hospedagemdesites.ws$|websiteseguro.com$’, $_SERVER[HTTP_HOST])) {
$email_from=‘trabalhe@italineaindoor.com.br’; // Substitua essa linha pelo seu e-mail@seudominio
}else {
$email_from = “trabalhe@italineaindoor.com.br” . $_SERVER[HTTP_HOST];
// Na linha acima estamos forçando que o remetente seja ‘webmaster@’,
// você pode alterar para que o remetente seja, por exemplo, ‘contato@’.
}

Tem a função eregi() alterada para preg_match() devido a descontinuação dessa função e no começo e no final da condição, é inserido o caractére “/” .

if (preg_match(‘/tempsite.ws$|hostlife.com.br$|hospedagemdesites.ws$|websiteseguro.com$/’, $_SERVER[HTTP_HOST])) {
$email_from=‘trabalhe@italineaindoor.com.br’; // Substitua essa linha pelo seu e-mail@seudominio
}else {
$email_from = “trabalhe@italineaindoor.com.br” . $_SERVER[HTTP_HOST];
// Na linha acima estamos forçando que o remetente seja ‘webmaster@’,
// você pode alterar para que o remetente seja, por exemplo, ‘contato@’.
}

Na linha 30:

//valido os emails
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])?$”, $email)){
}

Tem a função ereg() alterada para preg_match() devido a descontinuação dessa função e no começo e fim da condição, é adicionado o caractére “^”.

//valido os emails
if (!preg_match(“^([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])?$^”, $email)){

Download dos modelos

Right-arrow-32.png Download do exemplo para PHP 5.2

Right-arrow-32.png Download do exemplo para PHP 5.3

 

Sobre Wesley Menezes 15 artigos
Engenheiro de T.I Formado em Engenharia de Software, Mecatrônica e Ciência da Computação.

Seja o primeiro a comentar

Deixe uma resposta

O seu endereço de email não será publicado.


*