Enviando e-mail com anexos usando o PHPMailer

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+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 é ’.($value).’ , é 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!

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados