sábado, 24 de dezembro de 2011

Enviando email com anexos - PHPMailer

Estamos de volta com mais um tutorial sobre emails em PHP. Desta vez, iremos utilizar a classe PHPMailer para enviar um email com anexo por SMTP.
Em primeiro lugar, baixe a classe aqui: Download
Feito isso, copie os arquivos "class.phpmailer.php" e "class.smtp.php" para uma pasta qualquer no servidor. No tutorial esta pasta será chamada de classes.
Vamos agora criar o formulário. Crie um arquivo com o nome de email.php e digite o código abaixo:

View source
<?php
 
 if(isset($_POST['acao']) && $_POST['acao'] == 'enviar'){
 
 require('enviar.php');
 
 }
 
 ?>
 
 <!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>
 
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 
 <title>Formul&aacute;rio de Contato</title>
 
 </head>
 
 <body>
 
 <?php
 
 if(isset($msg))
 
 echo "<p id=\"msg\">$msg</p>";
 
 ?>
 
 <form action="" method="post" enctype="multipart/form-data">
 
 <fieldset>
 
 <legend>Formulário de Contato</legend>
 
 
 
 <label>
 
 <span>Nome</span>
 
 <input type="text" name="nome" />
 
 </label>
 
 
 
 <label>
 
 <span>E-mail</span>
 
 <input type="text" name="email" />
 
 </label>
 
 
 
 <label>
 
 <span>Titulo</span>
 
 <input type="text" name="titulo" />
 
 </label>
 
 
 
 <label>
 
 <span>Mensagem</span>
 
 <textarea name="mensagem" cols="30" rows="5"></textarea>
 
 </label>
 
 <label>
 
 <span>Arquivo</span>
 
 <input type="file" name="arquivo" />
 
 </label>
 
 
 
 
 
 <input type="hidden" name="acao" value="enviar" />
 
 <input type="submit" value="Enviar Formulário" class="btn"/>
 
 </fieldset>
 
 
 
 
 
 </form>
 
 
 
 </body>
 
 </html>
Com o formulário criado, vamos agora criar o arquivo que envia o email (usando a classe PHPMailer). Crie um arquivo com o nome de enviar.php e digite o código abaixo:

View source
<?php
 
 $nome = strip_tags(trim($_POST['nome'])); //pega o nome do form
 
 $email = strip_tags(trim($_POST['email'])); //pega o email do form
 
 $titulo = strip_tags(trim($_POST['titulo'])); //pega o titulo do form
 
 $mensagem = strip_tags(trim($_POST['mensagem'])); //pega a mensagem do form
 
 $arquivo = $_FILES['arquivo']; //pega o arquivo do form
 
 
 
 $tamanho = 512000; //define o tamanho máximo do arquivo, em bytes, aqui definido em 512000 bytes, ou seja, 500KB
 
 
 
 //verifica se todos os campos estão preenchidos, se não estiverem, não envia o email
 
 if(empty($nome)){
 
 $msg = 'O Nome é Obrigatório';
 
 }elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
 
 $msg = 'Digite um E-mail válido';
 
 }elseif(empty($titulo)){
 
 $msg = 'O Título é Obrigatório';
 
 }elseif(empty($mensagem)){
 
 $msg = 'A Mensagem é Obrigatória';
 
 }elseif(!is_uploaded_file($arquivo['tmp_name'])){
 
 $msg = 'O Arquivo é Obrigatório';
 
 }elseif($arquivo['size'] > $tamanho){
 
 $msg = 'O limite do tamanho do arquivo é de 500KB';
 
 }else{ //se todos os campos estiverem preenchidos, configura e envia o email
 
 require('classes/class.phpmailer.php'); //carrega a classe phpmailer, altere para a pasta onde se encontra o arquivo "class.phpmailer.php"
 
 
 
 $mail = new PHPMailer(); //instancia a classe PHPMailer
 
 $mail->IsSMTP(); //define que o email será enviado por SMTP
 
 $mail->SMTPAuth = true; //define que tem autenticação smtp
 
 $mail->Port = 25; //define a porta do servidor smtp - altere para a porta que seu servidor usa
 
 $mail->Host = 'smtp.seusite.com.br'; //define o servidor smtp - altere para o seu servidor smtp
 
 $mail->Username = 'login@seusite.com.br'; //define o nome de usuario do servidor smtp, altere para o seu usuário
 
 $mail->Password = '123546'; //define a senha do servidor smtp, altere para a sua
 
 $mail->SetFrom('webmaster@seusite.com.br', 'Seu Site'); //define o remetente da mensagem, altere para o real
 
 $mail->AddAddress('destino@provedor.com', 'nome'); //define o destino da mensagem, altere para o desejado
 
 $mail->Subject = 'Formulário de Contato'; //define o assunto da mensagem
 
 
 
 $body = "<b>Nome</b> :{$nome}
 
 
 
 <b>E-mail</b> :{$email}
 
 
 
 <b>Titulo</b> :{$titulo}
 
 
 
 <b>Mensagem</b> :{$mensagem}
 
 
 
 <b>Arquivo</b> : ".$arquivo['name'];
 
 //a variavel $body define o corpo da mensagem
 
 $mail->MsgHTML($body); //configura o email como HTML
 
 $mail->AddAttachment($arquivo['tmp_name'], $arquivo['name']); //adiciona o anexo
 
 
 
 if($mail->Send()) //tenta enviar o email
 
 $msg = 'Sua Mensagem foi enviada com Sucesso!!!'; //se conseguir, exibe a mensagem aqui definida
 
 else
 
 $msg = 'Sua Mensagem não foi enviada, tente novamente'; //se não conseguir, exibe a mensagem aqui definida
 
 
 
 }
 
 
 
 ?>
 
 
Pronto, você já tem um formulário que envia email com o php, utilizando a classe PHPMailer.

Um comentário:

  1. meu amigo pode me ajudar nesta classe p phpmailler como eu envio usando o localhost e nao usando smtp os dados de um formulario

    ResponderExcluir