Enviando um e-mail pelo site com resposta automática e arquivo anexo

Canal: PHP  |  Autor: Gabriel Pinheiro  |  Publicado em: 22/06/2009  |  Views: 3.841
Olá Pessoal! Algum tempo atrás, fui contactado por um cliente que precisava enviar um arquivo anexado ao e-mail para os clientes interessados em seu catálogo de produtos. Esse catálogo consistia num arquivo PDF com preços e imagens dos mesmos.

Pesquisei muito, e depois de concluir o serviço, achei justo dividir essa pesquisa com todos. Segue abaixo o código PHP para enviar e-mail com arquivo em anexo:

Primeiramente, um código bem conhecido aqui no Oficina da Net:


<?php

/* Enviar E-mail com Resposta Automática
* Desenvolvido por: Gabriel Pinheiro
* Data: 04/12/2007
*/

// Recebendo os dados passados pela página "form_contato.php"

$recebenome = $_POST['nome" rel="nofollow" target="_blank">;
$recebemail = $_POST['email" rel="nofollow" target="_blank">;
$recebemsg  = $_POST['mensagem" rel="nofollow" target="_blank">;

/* Validando os dados do formulário
* Adicionado dia 14/01/2008
* Por: Gabriel Pinheiro
*/

// Proibindo que os campos fiquem em branco

if (($recebenome == "") || ($recebemail == "") || ($recebemsg == ""))
{
    echo "<script>alert('Nenhum campo pode ficar em branco.');</script>";
    echo "<script>history.go(-1);</script>";
}

// Validando o campo com E-mail
if (substr_count($recebemail,"@") == 0 || substr_count($recebemail,".") == 0)
{
    echo "<script>alert('Por favor, utilize um e-mail válido');</script>";
    echo "<script>history.go(-1);</script>";
}

// Definindo os cabeçalhos do e-mail
$headers = "Content-type:text/html; charset=iso-8859-1";

// Vamos definir agora o destinatário do email, ou seja, VOCÊ ou SEU CLIENTE
$para = "seuemail@provedor.com";

// Definindo o aspecto da mensagem
$mensagem   = "<h3>De:</h3> ";
$mensagem  .= $recebenome . $recebemail;
$mensagem  .= "<h3>Assunto:</h3>";
$mensagem  .= "Mensagem do Site";
$mensagem  .= "<h3>Mensagem</h3>";
$mensagem  .= "<p>";
$mensagem  .= $recebemsg;
$mensagem  .= "</p>";

// Enviando a mensagem para o destinatário
$envia =  mail($para,"E-mail do Site",$mensagem,$headers);

// Resposta Automática, preparando o e-mail com a resposta.
$mensagem2  = "<p>Olá <strong>" . $recebenome . "</strong>. Agradeçemos sua visita e a oportunidade de recebermos o seu contato. Em até 48 horas você receberá no e-mail fornecido a resposta para sua questão.</p>n";
$mensagem2 .= "<p>Observação - Não é necessário responder esta mensagem.</p>n";
?>


Só o que o trecho acima faz é receber as variáveis do formulário de contato e disparar os e-mails e a resposta automática. Ainda no mesmo arquivo, você deverá inserir o seguinte código para enviar um arquivo em anexo:


<?php
// Envia um e-mail para o remetente, agradecendo a visita no site, e dizendo que em breve o e-mail será respondido. Além disso, envia um arquivo .PDF em anexo.

$boundary = strtotime('NOW');

$headers = "From: Site <atendimento@site.com.br>n";
$headers .= "MIME-Version: 1.0n";
$headers .= "Content-Type: multipart/mixed; boundary="" . $boundary . ""n";

$msg = "--" . $boundary . "n";
$msg .= "Content-Type: text/html; charset="iso-8859-1"n";
$msg .= "Content-Transfer-Encoding: quoted-printablenn";  
$msg .= $mensagem2;
$msg .= "--" . $boundary . "n";
$msg .= "Content-Transfer-Encoding: base64n";
$msg .= "Content-Disposition: attachment; filename="endomarketing.pdf"nn";

ob_start();
readfile("endomarketing.pdf");
$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($recebemail, "Sua mensagem foi recebida!", $msg, $headers);
echo "<script>alert('E-mail enviado com sucesso!');</script>";
echo "<meta http-equiv='Refresh' content='0;URL=form_contato.php' />";
?>


O que essa parte final do script faz?
Simples: Ele envia um e-mail para a pessoa que efetuou o contato, neste e-mail está uma mensagem, e também um anexo de um arquivo, com um nome fictício de "endomarketing.pdf".

No geral, o administrador do site receberá um e-mail com o contado do cliente, e o cliente receberá uma resposta automática dizendo que sua mensagem foi recebida, e outro e-mail, agora com o arquivo em anexo.

Fazendo variações, é possível permitir que o próprio usuário escolha qual arquivo anexar, para enviar direto ao administrador do site. Porém não recomendo, uma vez que a incidência de vírus e outras pragas digitais podem fazer com que esse recurso deixe de ser inovador para ser desastroso.

Segue o material em anexo!

Forte abraço a todos, e até a próxima
Creative Commons Esta obra está licenciada sob uma Licença Creative Commons. Você pode copiar, distribuir, exibir, executar, desde que seja dado crédito ao autor original (Citando nome do autor, data, local e link de onde tirou o texto). Você não pode fazer uso comercial desta obra. Você não pode criar obras derivadas.
Vote no artigo:
NR. DE VOTO(S): [1]

Compartilhe:

[x] Fechar Preencha os campos abaixo para indicar esta página:
Seu nome:
Seu e-mail:
Nome do indicado:
E-mail do indicado:
Deixe uma mensagem:
Anti-spam:

(nova imagem)
Preencha o que vê:
Twitter diHITT Facebook delicious envie por e-mail comentar

comentarComentários:

Preencha o formulário para comentar:

[x] Fechar
Nome:*
E-mail:* (não será exibido)
Site: (http://)
Comentário:*
Anti-spam:

(nova imagem)
Preencha o que vê:

Deseja receber as respostas dos comentários

Heavytutorials
Publicado em:
22/06/2009 - 10:48
Enviar email eu sabia(¬¬), enviar anexo já não, obrigado por explicar tao simples.
Parabens pelo topico
Paulo
Publicado em:
22/06/2009 - 11:43
Paulo
Cara, simples não achei não, pq sou novato, mas o código funcionou mesmo! Parabéns!
Felipe Vasconcelos
Publicado em:
22/06/2009 - 14:05
Show de bola o script, enviar email eu também já sabia, mas com anexo junto ai já se tornava um mistério por causa dos headers :)

Abraços
Agencia
Publicado em:
23/06/2009 - 12:39
Agencia
Até funciona, mas dá uma tela de erro.

Warning: mail(): SMTP server response: 550.5.7.1 <xxxxx@xxxx.com.br> ... we do not relay <xxxxxx@xxxxx.com.br> in (...)

Pode me ajudar?
Juliana
Publicado em:
24/06/2009 - 12:16
Juliana
Muito bom o artigo, Parabéns!
Gabriel
Publicado em:
24/06/2009 - 13:42
Gabriel
Colega,

Pela mesagem de erro o seu envio pela função mail() está desconfigurada ou não está encontrando o email corretamente
Cristiano Gomes
Publicado em:
25/06/2009 - 08:40
É sempre uma boa prática dar feedback mesmo automático aos usuários dos sites, é uma forma de tranquilizar o usuário que ao enviar um contato fica, mesmo com a mensagem do site de mensageme enviada com sucesso, sem saber se os donos do site leram ou não.
Andre
Publicado em:
31/07/2009 - 20:42
Andre
mandou muito bem nesse post, está de parabéns, continue assim