Buenas, estoy intentato enviar un email con un archivo adjunto desde flash, y conseguir lo consigo si..., pero me llegan 3 e-mails .... 1 con el archivo adjunto y sin los campos de formulario, otro totalmente vacio y el último con los datos del cliente que puso en el formulario, claro está, la idea es recibir uno con los datos del formulario y del archivo adjunto.
Os pongo aqui los codigos usados ... será algo largo...
Os pongo primero el de Flash:
Cita: enviar_btn.onRelease = function() {
Delete();
comprovar();
fileRef.browse(allTypes);
};
// Funcion de Envio de Correo
var envioMail:LoadVars = new LoadVars();
var recibirMail:LoadVars = new LoadVars();
function Enviar() {
envioMail.nombre = contingut_mc.imatges_mc.nombre_txt.text;
envioMail.apellidos = contingut_mc.imatges_mc.apellidos_txt.text;
envioMail.email = contingut_mc.imatges_mc.email_txt.text;
envioMail.telefono = contingut_mc.imatges_mc.telefono_txt.text;
envioMail.direccion = contingut_mc.imatges_mc.direccion_txt.text;
envioMail.poblacion = contingut_mc.imatges_mc.poblacion_txt.text;
envioMail.estudios = contingut_mc.imatges_mc.estudios_txt.text;
envioMail.horario = horari_mc.select_txt.text;
envioMail.curriculum = contingut_mc.imatges_mc.curriculum_txt.text;
envioMail.send("includes/curriculum.php");
};
/////////////////////////
import flash.net.FileReference;
var allTypes:Array = new Array();
var imageTypes:Object = new Object();
imageTypes.description = "Archivos permitidos (*.jpg, *.txt, *.pdf, *.doc)";
imageTypes.extension = "*.jpg; *.txt; *.pdf; *.doc";
allTypes.push(imageTypes);
var adjuntar:Object = new Object();
adjuntar.onSelect = function(file:FileReference):Void {
if(!file.upload("direccion de curriculum.php")) {
comprovacio_mc.comprovació_txt.htmlText += "<b>Error al obrir la finestra de selecció.</b><br>";
error();
}
}
adjuntar.onCancel = function(file:FileReference):Void {
comprovacio_mc.comprovació_txt.htmlText += "<b>Cancelat.</b><br>";
}
adjuntar.onOpen = function(file:FileReference):Void {
comprovacio_mc.comprovació_txt.htmlText += "<b>Obrint Arxiu: " + file.name + "</b><br>";
}
adjuntar.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void {
comprovacio_mc.comprovació_txt.htmlText += "<b>Carregant Arxiu " + file.name +": " + Math.round(bytesLoaded/1024) + " KB d'un total de " + Math.round(bytesTotal/1024) + " KB</b><br>";
}
adjuntar.onComplete = function(file:FileReference):Void {
comprovacio_mc.comprovació_txt.htmlText += "<b>Carrega completa de " + file.name + "<br>Enviat formulari correctament.</b><br>";
Enviar();
enviado();
}
adjuntar.onHTTPError = function(file:FileReference):Void {
comprovacio_mc.comprovació_txt.htmlText += "<b>Error en la carrega HTTP de " + file.name + "</b><br>";
error();
}
adjuntar.onIOError = function(file:FileReference):Void {
comprovacio_mc.comprovació_txt.htmlText += "<b>Error de conexió IO de " + file.name + "</b><br>";
error();
}
adjuntar.onSecurityError = function(file:FileReference, errorString:String):Void {
comprovacio_mc.comprovació_txt.htmlText += "<b>Error de seguretat de " + file.name + " error del tipus: " + errorString + "</b><br>";
error();
}
var fileRef:FileReference = new FileReference();
fileRef.addListener(adjuntar);
En el boton enviar_btn "fileRef.browse(allTypes);" esta linea no esta, realmente esta dentro de la funcion comprovar(); que ejecuto con el botón, es solo para que se vea que lo ejecuto
... donde esta file.upload no esta la url ja que no puedo poner la correcta...
Os pongo ahora el codigo PHP
Código PHP:
<?php
//mediante la clase phpMailer incluimos el php y la ruta de PluginDir que es la misma en este caso
//ja que este archivo se encuentra en la misma ruta, sino deberà canviarse el require y el pluginDir
require "class.phpmailer.php";
$mail = new phpmailer();
$mail->PluginDir = "";
$mail->Mailer = "smtp";
//Host del email que usaremos para el envio, con sus user y pass y autentifcicación smtp
$mail->Host = "mail.******.com";
$mail->SMTPAuth = true;
$mail->Username = "info@*****.com";
$mail->Password = "******";
$mail->From = "info@*****.com";
$mail->FromName = "Suggerències";
//Por defecto 10, se le aumenta para que los correos gratuitos (algo más lentos) puedan llegar
$mail->Timeout = 30;
//aplicamos HTML para visualizar el email en este formato
$mail->IsHTML(true);
//declaramos variables enviadas desde flash
$nombre = $_POST["nombre"];
$apellidos = $_POST["apellidos"];
$email = $_POST["email"];
$telefono = $_POST["telefono"];
$direccion = $_POST["direccion"];
$poblacion = $_POST["poblacion"];
$estudios = $_POST["estudios"];
$horario = $_POST["horario"];
$curriculum = $_POST["curriculum"];
//añadimos el e-mail/s al que enviaremos y el subject y cuerpo que se incluye todos los datos del formulario
$mail->AddAddress("info@*****.com");
$mail->Subject = "Borsa de treball de $nombre";
$mail->Body = "<b>$nombre $apellidos ens envia el seu currículum:<br><br>Nom: $nombre<br>Cognoms: $apellidos<br>E-mail: $email<br>Telèfon: $telefono<br>Direcció: $direccion<br>Població: $poblacion<br> Estudis: $estudios<br>Horari preferent: $horario<br><br>Currículum:</b><br>$curriculum";
$mail->AltBody = "$nombre $apellidos ens envia el seu currículum: Nom: $nombre Cognoms: $apellidos E-mail: $email Telèfon: $telefono Direcció: $direccion Població: $poblacion Estudis: $estudios Horari preferent: $horario Currículum: $curriculum";
//Incluimos un attach de un archivo que recibimos de flash mediante Filedata y filereference
$archivo = $_FILES['Filedata']['tmp_name'];
$archivo_name = "curriculum-".$_FILES['Filedata']['name'];
$mail-> AddAttachment($archivo,$archivo_name);
//Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho
//para intentar enviar el mensaje, cada intento se hara 5 segundos despues
//del anterior, para ello se usa la funcion sleep
$intentos=1;
while ((!$exito) && ($intentos < 5)) {
sleep(5);
//echo $mail->ErrorInfo;
$exito = $mail->Send();
$intentos=$intentos+1;
}
?>
Yo por mi parte veo el problema de la siguiente manera: Cuando envio el archivo con FileReference, el php envia ya el e-mail sin atender al envio del formulario, que se envia posteriormente con LoadVars, y esto no se como resolver para que se envie junto, supongo que modificando algo de flash y php pero no se como .... ahora bien, el tercer mail es un misterio ... la verdad.
Espero que alguno lo haya intentado y sepa como solucionarlo y me heche un cable ...
CIAO y mercy por cualquier ayuda!!