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!