Enviando e-mail com anexos usando o PHPMailer

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Enviando e-mail com anexo via form em HTML utilizando a classe PHPMailer

Já sabemos enviar um e-mail simples via formulário em HTML+PHPMailer (veja em http://www.devmedia.com.br/articles/viewcomp.asp?comp=9642). A idéia agora é anexar images do tipo JPEG (.JPG) e enviar também via site como anexo para um e-mail específico.

Primeiramente é preciso fazer o upload das imagens para o servidor do form HTML e, em seguida, usar a classe PHPMailer (download PHPMailer em http://sourceforge.net/project/showfiles.php?group_id=26031) para anexar os arquivos e enviá-los ao e-mail.
 
Certifique-se de que no servidor tenha uma pasta/diretório chamado por exemplo de upload e, mude seus atributos CHMOD 777 para esta pasta guardará as imagens do usuário para em seguida serem anexadas.

Em seguida precisamos implementar o formulário de upload dos aqruivos que irá interagir com os usuários. Será usado o script de upload de mútiplos arquivos (download do script em http://www.plus2net.com/php_tutorial/multi-upload.zip), salve com o nome que desejar:
$max_img = 5; // Maximum number of images value to be set here
echo “<-form method=post action=attach.php enctype=’multipart/form-data’>”;
for($i=1; $i<=$max_no_img; $i++){
echo “<-tr><-td>Imagem $i: <-/td><-td>
<-input type=file name=’images[]‘ class=’bginput’>
<-/td><-/tr>”;
}
?>

Este script de upload de mútiplos arquivos auxilia no caso de não se saber quantos arquivos o usuário quer anexar e, tamb~em permite configurar o número máximo de arquivos que o usuário pode anexar: $ max_no_img = 4;

Agora vamos a parte do PHP:
 
Arquivo attach.php
require(”class.phpmailer.php”);
//variáveis
$name = “the Submitter”;
$email_subject = “E-mail com imagnes anexadas”;
$Email_msg =”TESTE: \n”;
$Email_to = “seu-email@email.com”; // the one that recieves the email
$email_from = “email-usuario@email.com”;
$dir = “uploads/$filename”;
chmod(”uploads”, 0777);
$attachments = array();

//check formato
checkType();
function checkType()
{
  while(list($key,$value) = each($_FILES[images][type]))
  {
    strtolower($value);
    if($value != “image/jpeg” AND $value != “image/pjpeg” AND $value != “”)
    {
      exit(’Desculpe, formato dos arquivos é ’.($value).’ , é aceito somente imagens tipo JPEG.’);
    }
  }
  checkSize();
}

//check tamanho
function checkSize()
{
  while(list($key,$value) = each($_FILES[images][size]))
  {
    $maxSize = 5000000;
    if(!empty($value))
    {
      if ($value > $maxSize)
      {
        echo "Deculpe o tamanhos do(s) arquivo(s) é muito grande... o tamanho máximo suportado é $maxSize Bytes = 5MB”;
        exit();
      }
      else
      {
        $result = “Tamanho do(s) arquivo(s) OK”;
      }
    }
  }
  uploadFile();
}

//função de upload
function uploadFile()
{
  global $attachments;
  while(list($key, $value) = each($_FILES[images][name]))
  {
    if(!empty($value))
    {
      $filename = $value;
      //vetor de arquivos - array_push($attachments, $filename);
      $dir = “uploads/$filename”;
      chmod(”uploads”, 0777);
      $success = copy($_FILES[images][tmp_name][$key], $dir);
    }
  }
  if ($success)
  {
    echo ”Seus arquivos foram enviados (upload) com sucesso para o servidor e serão anexados”;
    SendIt();
  }
  else
  {
    exit(”Desculpe o servidor não conseguiu receber o upload dos arquivos”);
  }
}

//PHPMailer com anexos
function SendIt()
{
  //variáveis
  global $attachments, $name, $Email_to, $Email_msg, $email_subject, $email_from;

  $Email = new PHPMailer();
  $Email->IsSMTP(); //via SMTP
  $Email->Host = “localhost”; //SMTP servers
  $Email->SMTPAuth = false; //autenticação SMTP
  $Email->From = $email_from;
  $Email->FromName = $name;
  $Email->AddAddress($Email_to);
  $Email->AddReplyTo($email_from);
  $Email->WordWrap = 50; //tamanho da msg

  //anexando todos os arquivos para envio
  foreach($attachments as $key => $value)
  {
    $Email->AddAttachment(”uploads”.”/”.$value);
  }

  $Email->Body = $Email_msg. ”Nome : “ .$name.”\n”;
  $Email->IsHTML(false); //envio como HTML (falso)
  $Email->Subject = $email_subject;

  if(!$Email->Send())
  {
    echo “Esse e-mail não pode ser enviado”;
    echo “Erro: ” . $mail->ErrorInfo;
    exit;
  }
  echo “Seu e-mail foi enviado, aguarde nosso contato”;

  //apagar uploads
  foreach($attachments as $key => $value)
  {
    unlink(”uploads”.”/”.$value);
   }
}

?>

Algumas explicação sobre o codigo:
1. Declaração das variáveis respectivamente: nome do usuário; título do e-mail; texto da mensagem; e-mail de recebimento; e-mail de envio; pasta no servidor das imagens do usuário; CHMOD tipo 777; vetor para os anexos.
$name = “the Submitter”;
$email_subject = “E-mail com imagnes anexadas”;
$Email_msg =”TESTE ANEXO: \n”;
$Email_to = “seu-email@email.com”; // the one that recieves the email
$email_from = “email-usuario@email.com”;
$dir = “uploads/$filename”;
chmod(”uploads”, 0777);
$attachments = array();
 
2. Função de checagem do formato dos arquivos, a serem enviados ao servidor (upload), se estão de acordo com a configuração. No caso são imagens JPEG:
function checkType(){
  while(list($key,$value) = each($_FILES[images][type])){
    strtolower($value);
    if($value != “image/jpeg” AND $value != “image/pjpeg” AND $value != “”) {
      exit(’Desculpe, formato dos arquivos é ’.($value).’ , é aceito somente imagens tipo JPEG.’) ;
    }
  }
  checkSize();
}
 
3. Função de checagem do tamanho dos arquivos, a serem enviados ao servidor (upload), se estão de acordo com a configuração. No caso o tamanho máximo são de 5MB
function checkSize(){
  while(list($key,$value) = each($_FILES[images][size])){
    $maxSize = 5000000;
    if(!empty($value)){
      if ($value > $maxSize){
        echo "Deculpe o tamanhos do(s) arquivo(s) é muito grande... o tamanho máximo suportado é $maxSize Bytes = 5MB”;
        exit();
      }else{
        $result = “Tamanho do(s) arquivo(s) OK”;
      }
...
 
4. Função de upload dos arquivos do usuário, onde será usado um vetor para guardar os arquivos do servidor e anexar no e-mail
function uploadFile(){
  global $attachments;
  while(list($key, $value) = each($_FILES[images][name])){
    if(!empty($value)){
      $filename = $value;
      //the Array will be used later to attach the files and then remove them from server! array_push($attachments, $filename);
      $dir = “uploads/$filename”;
      chmod(”uploads”, 0777);
      $success = copy($_FILES[images][tmp_name][$key], $dir);
    }
  }
...
 
5.  Envio será via SMTP sem autenticação
$Email->IsSMTP();
$Email->Host = “localhost”;
$Email->SMTPAuth = false;
 
6. Função do PHPMailer que fará o anexo do(s) arquivo(s)
function SendIt()
{
...
  foreach($attachments as $key => $value)
  {
    $Email->AddAttachment(”uploads”.”/”.$value);
  }
...
 
7.  Após o envio do e-mail com anexo, os arquivos (imagens) serão todos apagados da pasta upoads do servidor
foreach($attachments as $key => $value){
  unlink(”uploads”.”/”.$value);
}
 
Até a próxima
 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?