file-upload coldfusion email-attachments cfmail

file upload - ¿Por qué no puedo adjuntar mi archivo cargado a un correo electrónico?



file-upload coldfusion (1)

Tengo un formulario con una entrada de archivo:

<input type="file" id="uploadFile" name="uploadFile" />

Presento el formulario utilizando el método ajaxForm del complemento de formulario JQuery .

Luego, en el código para manejar la publicación, leo y proceso el archivo. Uso cfspreadsheet para leer el archivo directamente desde el campo de entrada del archivo:

<cfspreadsheet action="read" src="#form.uploadFile#" sheet="1" query="spreadsheetData" headerRow="1" excludeHeaderRow="true" >

Todo esto funciona correctamente

Decidí que también quería enviar la hoja de cálculo al administrador por correo electrónico. Pensé que podría lograr esto simplemente con una etiqueta de cfmail que incluye la siguiente etiqueta cfmailparam:

<cfmail to="[email protected]" from="[email protected]" subject="Upload File" type="HTML"> <cfmailparam file="#form.uploadFile#" /> File processed successfully </cfmail>

Sin embargo, esto no funciona correctamente: el correo electrónico no se envía. ¿Qué estoy haciendo mal?


La solución de Leigh funciona bien y probablemente ya haya implementado en su código. Pensé que pondría mis 0,02 centavos sobre por qué esto es un problema para empezar.

Cuando carga un archivo, el archivo se coloca en una ubicación de carpeta temporal . Si no hace nada con el archivo para colocarlo en un destino final, el archivo se elimina, probablemente al final de su solicitud.

Mientras tanto, cfmailparam en realidad no adjunta el archivo en tiempo de ejecución. Depende del proceso de cola de impresión hacer eso. Si echa un vistazo en su ColdFusion instala el directorio "mail / spool", verá un archivo con la extensión .cfmail. Si no puede "atrapar" uno antes de la entrega, verifique su carpeta que no se puede entregar. Seguramente habrá algunos por ahí.

El archivo .cfmail sirve como una instrucción para el servicio de cola de impresión que envía el correo. Tiene un sujeto, de, a, dirección del servidor, cuerpo, etc.

Si adjuntas un archivo, verás algo en la parte inferior de este archivo que se ve así:

file: D:/jrun/temp/blah.tmp file-type: application/octet-stream; name="I am the file you uploaded.tmp" file-disposition: attachment remove: false

En tiempo de ejecución, CF toma este archivo y hace lo que Leigh sugiere: lo coloca como un archivo binario con una parte de correo (codificada en base64) en el cuerpo principal del mensaje. Entonces, lo que sucede es que para cuando el servicio de cola de impresión intenta abrir y adjuntar este archivo, el archivo ha desaparecido porque la solicitud ha finalizado. También creo que el archivo existe con una extensión ".tmp" en este directorio temporal, que obviamente no es lo que desea adjuntar (pero podría ser una versión anterior de CF).

Para solucionarlo, primero use cffile con la acción "cargar" para colocar el archivo en una carpeta real (en lugar de temporal) en el disco. Luego use cfmailparam para adjuntar el archivo. NOTA: El atributo "eliminar" establecido en "sí" hará que CF borre el archivo una vez que haya enviado correctamente el correo, que es el efecto que creo que usted está buscando.