Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago de Oliveira Cruz

[TUTORIAL]Formulário de E-mail em AS2 + PHP + Anexos

Recommended Posts

Esse tutorial foi postado também em meu blog

http://berseck.wordpress.com

 

 

Bom galera sempre vejo as pessoas por ai com maior problemão para criar um e-mail com anexos no flash...

 

Então resolvi criar esse tutorial que vai ensinar como fazer para anexar diversos anexos ao mesmo tempo em seu e-mail.

 

Bom vamos lá

 

Vamos precisar criar alguns campos né?

 

Então criei os seguintes campos que estão na imagem:

Imagem Postada

 

Essa imagem é composta de:

1 DataGrid

3 campos de texto input Text

2 campos de texto dynamic text

5 botões

 

As instancias são

anexos é a instancia do DataGrid

nome é a variavel do campo de texto do nome

email é a variaveldo campo de texto de email

anexo é a variavel colocada no campo de texto anexo

mensagem é a variavel do campo de mensagem

status é a variavel do campo de texto onde mostrará o status do formulário

 

os botões serão:

enviar, excluir, limpar, procurar e anexar

Todos com esses nomes de instância

 

Monstado o layout acima de acordo com as instâncias

 

o código AS2 é:

import flash.net.FileReference;
import mx.controls.gridclasses.DataGridColumn;
System.useCodepage = true;
anexos.setStyle("color","0×696969");
anexos.setStyle("themeColor","haloBlue");
anexos.setStyle("fontSize",12);
anexos.setStyle("fontFamily","Verdana");
anexar.tabEnabled = false;
procurar.tabEnabled = false;
enviar.tabEnabled = false;
limpar.tabEnabled = false;
nome = "";
email = "";
mensagem = "";
sytemMsg.text = "";
anexo = "";
var a:Array = new Array();
var a2:Array = new Array();
var count:Number = 0;
var inic:Number;
var t:Number = 0;

anexos._x = 318;
anexos._y = 21;
anexos.setSize(210,83);
anexos.multipleSelection = true;

dgL = new Object();
dgL.cellPress = function(evt_obj:Object) {
	inic = evt_obj.selectedIndex;
};

anexos.addEventListener("cellPress",dgL);
var obj_e:LoadVars = new LoadVars();
var obj_b:LoadVars = new LoadVars();

excluir.onPress = function() {
	obj_e.nome = a[inic];
	obj_e.sendAndLoad("excluir.php",obj_b,"POST");
	obj_b.onLoad = itemRemoved;
};

function itemRemoved() {
	if (obj_b.ok == 1) {
		for (var i = 0; i<a.length; i++) {
			if (a[inic] != a[i]) {
				a[t] = a[i];
				t++;
			}
		}
		anexos.removeItemAt(inic);
		sytemMsg.text = "Anexo Removido";
	} else {
		sytemMsg.text = "Anexo não Existe";
	}
}


var obj_s = new LoadVars();
var obj_l = new LoadVars();

enviar.onPress = function() {
	if (nome.text == "") {
		sytemMsg.text = "O nome esta vazio";
		Selection.setFocus("nome");
	} else if (email.text == "") {
		sytemMsg.text = "O e-mail está vazio";
		Selection.setFocus("email");
	} else if (email.indexOf("@") == -1 || email.indexOf(".") == -1) {
		sytemMsg.text = "O e-mail inválido";
		Selection.setFocus("email");
	} else if (mensagem.text == "") {
		sytemMsg.text = "Faltou a mensagem";
		Selection.setFocus("mensagem");
	} else {
		obj_s.nome = nome;
		obj_s.email = email;
		obj_s.mensagem = mensagem;
		obj_s.anexo = a;
		obj_s.num = count;
		obj_s.sendAndLoad("mail.php",obj_l,"POST");//Envio as variáveis para o php
		obj_l.onLoad = sentMail;
	}
};

function sentMail() {
	if (obj_l.ok == 1) {
		nome = "";
		email = "";
		mensagem = "";
		anexo = "";
		a = [];
		anexados.text = "";
		count = 0;
		anexos.removeAll();
		sytemMsg.text = "Mensagem Enviada";
	} else {
		sytemMsg.text = "Erro ao Enviar";
	}
}

limpar.onPress = function() {
	nome = "";
	email = "";
	mensagem = "";
	sytemMsg.text = "";
	anexo = "";
	a = [];
	anexados.text = "";
	count = 0;
};

var frUpload:FileReference = new FileReference();
var objUpload:Object = new Object();
var arquivosPermitidos:Array = new Array();

function initUpload(Void):Void {
	arquivosPermitidos[0] = {description:"Imagens (*.jpg)", extension:"*.jpg; *.jpeg"};

	arquivosPermitidos[1] = {description:"Imagens (*.gif)", extension:"*.giff; *.gif"};

	arquivosPermitidos[2] = {description:"Documentos (*.doc)", extension:"*.docx; *.doc"};

	arquivosPermitidos[3] = {description:"Documentos (*.pdf)", extension:"*.pdf"};

	arquivosPermitidos[4] = {description:"Arquivos (*.rar)", extension:"*.zip; *.rar"};

	objUpload.onPress = function(f:FileReference):Void  {
		anexo = f.name;
		a[count] = f.name;
		count++;
	};
	frUpload.addListener(objUpload);

	anexar.onPress = function(Void):Void  {
		frUpload.upload("upload.php");
	};

	procurar.onRelease = function(Void):Void  {
		frUpload.browse(arquivosPermitidos);
	};
	
	objUpload.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void {
	    sytemMsg.text ="onProgress with bytesLoaded: " + bytesLoaded + " bytesTotal: " + bytesTotal;
	}
	
	objUpload.onComplete= function(f:FileReference):Void  {
		sytemMsg.text = "Arquivo Anexado";
		var dados:Object = {anexos:anexo};
		anexos.addItem(dados);
	};
	//ação de escolha de um arquivo na caixa de browse…
	objUpload.onSelect = function(f:FileReference):Void {
		anexo = f.name;
		a[count] = f.name
		count++;
	}
	objUpload.onHTTPError = function(file:FileReference):Void {
		sytemMsg.text = "onHTTPError: " + file.name;
	}
	
	objUpload.onIOError = function(file:FileReference):Void {
		sytemMsg.text = "onIOError: " + file.name ;
	}
	
	objUpload.onSecurityError = function(file:FileReference, errorString:String):Void {
		sytemMsg.text = "onSecurityError: " + file.name + " errorString: " + errorString;
	}

}
initUpload();

 

Bom agora eu preciso criar um código em php para excluir e outro para upload

Código php do upload.php

 

//diretório destino das imagens dentro da pasta da aplicação...
	//deve ter permissão para escrita chmod(777)...
	$dir = "./imagens/";
	//recebendo o arquivo multipart vindo do flash...
	$file = $_FILES["Filedata"];
	//finalizando o upload e criando apartir do arquivo temp, multipart, um novo arquivo
	// em nossa pasta de destino. O echo serve para dizer ao flash se deu certo ou não...
	echo move_uploaded_file($file["tmp_name"], $dir . "/" . $file["name"]);
	?>

 

excluir.php

 

<?php
if(isset($_POST['nome'])){
    $excluir = $_POST['nome'];
    $dir = "./imagens/";
    //Excluo o arquivo
    if(unlink($dir . "/" . $excluir)){
        echo "&ok=1&";
    }else{
        echo "&ok=2&";
    }
} else {
    echo "valor inexistente";
}?>

 

Agora onde fica o segredo da multiplicação dos anexos rs :P/>

mail.php

 

<?php
if(isset($_POST['nome']) && isset($_POST['anexo']) && isset($_POST['email'])){
//Recebo as variáveis do flash
$nome = $_POST['nome'];
$num = $_POST['num'];
$file = $_POST['anexo'];
$from = $_POST['email'];
$email_from = $from;
$email_subject = "Mail from website";
$email_txt = $_POST['mensagem'];

//Coloque seu e-mail aqui
//Put your mail here
$email_to = "mail@mail.com";

$headers = "From: ".$email_from; 

$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

$headers .= "\nMIME-Version: 1.0\n" . 
            "Content-Type: multipart/mixed;\n" . 
            " boundary=\"{$mime_boundary}\"";  
//Texto do e-mail
$email_message =     "Mensagem: $email_txt <br>" . "\n\n" . "--{$mime_boundary}\n" . "Content-Type:text/html; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . "Mensagem: $email_txt\n\n" . "\n\n";  

$email_message .=     "<br><br>" . "Nome: $nome" . "\n\n" . "--{$mime_boundary}\n" . "Content-Type:text/html; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n";

if($file != ""){
// Anexo os arquivos
// Attach itens to mail
$names = split(',',$file); 
foreach($names as $name) {
    $anexo = "./imagens/" . $name;
    
    /* 
    * Use fopen if your server dont accept file
    * Use fopen se seu servidor não aceita file
    */
    //$fileatt = $anexo;
    //$fileatt_type = "application/octet-stream";
    //$fileatt_name = $name;
    //$file = fopen($fileatt,'rb'); 
    //$data = chunk_split(base64_encode(fread($file,filesize($fileatt)))); 
    //fclose($file); 
    
    /*
    * Use file if your server dont accept fopen
    * Use file se seu servidor não aceita fopen
    */
    $data = chunk_split(base64_encode(join('',file($anexo)))); 
    
    $email_message .= "--{$mime_boundary}\n" . "Content-Type: {$fileatt_type};\n" . " name=\"{$fileatt_name}\"\n" . "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; 
    echo unlink("./imagens/" . $anexo);
}
}
   
$email_message .=  "--{$mime_boundary}--\n";


$ok = @mail($email_to, $email_subject, $email_message, $headers);
if(ok){
    echo "&ok=1&";
}else {
    echo "&ok=2&";
}
} else {
echo "email invalido";
}
?>

 

 

E é só :D/>

 

Espero que gostem ;)/>

 

Para baixar o código clique aqui

 

Devido aos usuarios terem muitos problemas com fopen procurei um outro metodo de resolver o problema e atualizei o código

Código atualizado, para usar file ou fopen para anexar os arquivos!!

 

Abraços e até a proxima

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa veio parabens pelo tutorial

vou tentar montar, soh que quere por alguns campos a mais, e vai precisar adicionar mais algumas linha de função se.

gostaria de saber c der algum erro e eu naum consiga achar c alguem pode me ajuda

agradeço desde ja e vo la monta o meu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá berseck! Fazendo um teste rápido percebi que os anexos chegam vazios ao e-mail destino. Exemplo: anexar um curriculo em word vai chegar apenas uma página word sem o conteudo descrito entende? Mesma coisa com um arqivo JPG, chega o ícone do arquvo anexado mas ele não abre no email...

 

Se eu estiver fazendo algo errado por favor da uma força ai ok...

 

Valeu!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o que lhe ajuda é dizer que sim você ta fazendo errado

 

Pois bem a resposta é sim você ta fazendo errado ;)/>

 

O arquivo não ta sendo anexado...

 

Você tem que ver se ele ta sendo uploadado para uma pasta

 

E para testar se o arquivo vai estar ainda lá

remova essa linha do código

echo unlink("./imagens/" . $fileatt_name);

 

E você vai ver se o arquivo ainda ta lá ou não. Abrindo a pasta via FTP

 

E realmente sugiro dar uma estudada em fopen e fclose

Pois se seu usuario do seu servidor não tem essa permissão as chances desse código não funcionar são bem grandes.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa... eu de novo!

 

e se eu precisar de mais um campo tipo telefone como faço: fiz assim: olhe por favor se esta certo ...

FLASH:

enviar.onPress = function(){
	if (nome.text == "") {
		status = "Coloque seu nome por favor.";
		selection.setFocus("nome");
	} else if (email.text == "") {
		status = "Faltou seu e-mail";
		Selection.setFocus("email");
	} else if (email.indexOf("@") == -1 || email.indexOf(".") == -1){
		status = "O e-mail é inválido";
		Selection.setFocus("email");
	} else if (telefone.text == "") {
		status = "Você não colocou seu Telefone.";
		Selection.setFocus("telefone");
	} else if (mensagem.text == "") {
		status = "Não vai escrever nada?";
		Selection.setFocus("mensagem");
	} else {
		obj_s.nome = nome;
		obj_s.email = email;
		obj_s.telefone = telefone;
		obj_s.mensagem = mensagem;
		obj_s.anexo = anex;
		obj_s.num = count;
		obj_l.onLoad = function(o){
			if(o){
				status = "Mensagem enviada com Sucesso!";

PHP:

//Recebo as variáveis do flash
$nome = $_POST['nome'];
$num = $_POST['num'];
$file = $_POST['anexo'];
$from = $_POST['email'];
$telefone = $_POST['telefone'];
$email_from = $from;
$email_subject = "Orçamento via WebSite";
$email_txt = $_POST['mensagem'];

PARABENS pelo tutorial, muito bom, eu ja estava maluco procurando isso na net...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim é exatamente isso...

 

Mas como já disse antes o meu tutorial foi feito com instancias....

 

Logo você tem que pegar os campos de texto com instancia.text ... e não só instancia

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok... no flash foi de boa, mas no php é assim mesmo? achei que faltou alguma coisa.... olha o codigo!

<?php
if(isset($_POST['nome']) && isset($_POST['anexo']) && isset($_POST['email'])){
//Recebo as variáveis do flash
$nome = $_POST['nome'];
$num = $_POST['num'];
$file = $_POST['anexo'];
$from = $_POST['email'];
$tel = $_POST['telefone'];
$email_from = $from;
$email_subject = "Orçamento via WebSite";
$email_txt = $_POST['mensagem'];

$email_to = "meuemail@meuemail.com";

$headers = "From: ".$email_from; 

$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

$headers .= "\nMIME-Version: 1.0\n" . 
			"Content-Type: multipart/mixed;\n" . 
			" boundary=\"{$mime_boundary}\"";  
//Texto do e-mail
$email_message = 	"Mensagem: $email_txt <br>" . "\n\n" . "--{$mime_boundary}\n" . "Content-Type:text/html; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . "Mensagem: $email_txt\n\n" . "\n\n";  

$email_message .= 	"<br><br>" . "Nome: $nome" . "\n\n" . "--{$mime_boundary}\n" . "Content-Type:text/html; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n";

if($file != ""){
// Anexo os arquivos
$names = split(',',$file); 
foreach($names as $name) {
	$anexo = "./imagens/" . $name;
	$fileatt = $anexo;
	$fileatt_type = "application/octet-stream";
	$fileatt_name = $name;
	
	$file = fopen($fileatt,'rb'); 
	$data = chunk_split(base64_encode(fread($file,filesize($fileatt)))); 
	fclose($file); 
	
	$email_message .= "--{$mime_boundary}\n" . "Content-Type: {$fileatt_type};\n" . " name=\"{$fileatt_name}\"\n" . "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n"; 
	echo unlink("./imagens/" . $fileatt_name);
}
}
   
$email_message .=  "--{$mime_boundary}--\n";


$ok = @mail($email_to, $email_subject, $email_message, $headers); 

} else {
echo "email invalido";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao...

 

essa parte ar deu certim, mas estou com o mesmo problema do amigo ai em cima, o anexo chega vazio! fiz o teste que você indicou retirando a linha echo unlink("./imagens/" . $fileatt_name); verifiquei no servidor as permissoes para fopen e fclose, dei permissao 777 para a pasta imagens, mas o arquivo nao chega de jeito nenhum!

 

Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom esse código meu foi criado em um servidor linux... testado e funciona... =/

 

Varias outras pessoas que conheço já testaram e também obtiveram sucesso...

você precisa ver se o seu servidor permite esse tipo de envio de anexo com eles...

 

Eles vão poder lhe ajudar melhor do que eu.

Abraços

 

EDITADO

 

Você tentou apenas mudar o campo de e-mail no php... para o seu e usar o SWF disponivel???

 

Para ver se no seu servidor apenas meu código sem alteração funciona?

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom esse código meu foi criado em um servidor linux... testado e funciona... =/

 

Varias outras pessoas que conheço já testaram e também obtiveram sucesso...

você precisa ver se o seu servidor permite esse tipo de envio de anexo com eles...

 

Eles vão poder lhe ajudar melhor do que eu.

Abraços

 

EDITADO

 

Você tentou apenas mudar o campo de e-mail no php... para o seu e usar o SWF disponivel???

 

Para ver se no seu servidor apenas meu código sem alteração funciona?

 

Abraços

entao... tentei fiz exatamente isso antes de postar aki...e tb nao funcionou. mas ta de boa, to tentando mexer e achar um possivel erro que eu tenha cometido!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Velho! nao entendi esse arquivo excluir.php... tenho que ter um arquivo desse na pasta correto? entao seria: formfacil.html, excluir.php, formfacil.swf, mail.php e upload.php????

 

pq no anexo que você colocou so veio o: formfacil.html, formfacil.swf, formfacil.fla, mail.php e upload.php ! ! !

 

so fica "carregando" teste por favor... FormFacil

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, berseck

Coloquei o código na minha página como sendo um iframe. Testei, anexei imagens, chegou tudo ok no meu email, porém por algumas vezes o iframe aparece como página não encontrada, depois de clicar em atualizar (F5) algumas vezes, o iframe com o código aparece! Será o uso do iframe eh q tá fazendo dar esse problema? Vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha eu nunca tive problemas como você está relatando com esse código... provavelmente está dando problema é no iframe mesmo... vale a pena você dar uma olhada nisso... se de resto está normal.

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola!

 

Tambem não estou conseguindo anexar o arquivo.

Olhei no FTP, na pasta "images", e o arquivo esta lá, hospedou certinho. Só o email que não pega mesmo.

O que pode ser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.