Já sabemos enviar um e-mail simples via formulário em HTML+PHPMail. 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 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.


$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ém permite configurar o número máximo de arquivos que o usuário pode anexar: $ max_no_img = 4;

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 = Fuploads/$filename";

chmod("uploads", 0777);

$attachments = array();



//checkformato
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 é <B>’.($value).’</B> , é aceito somente imagens tipo JPEG.’);

 }

 }

 checkSize();

}



//checktamanho

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 arquivosforamenviados (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 servidordas 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 doformato 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 PHPMailerque 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 upoadsdo servidor

foreach($attachments as $key => $value){

 unlink("uploads"."/".$value);

}

Até a próxima!