2012-07-02 12 views
7

Tengo un formulario con una entrada de archivo:¿Por qué no puedo adjuntar mi archivo cargado a un correo electrónico?

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

me envíe el formulario utilizando el método de la ajaxForm JQuery form plugin.

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 podía lograr esto simplemente con una etiqueta 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 está funcionando correctamente - el correo electrónico no se envía. ¿Qué estoy haciendo mal?

+0

¿Puede mostrar el código completo de CFMAIL? – BKK

+0

¿Hay un mensaje de error? Si es así, ¿qué es? De lo contrario, ¿aparece el correo electrónico en las carpetas Spool o Undelivr de su instalación ColdFusion? –

+0

@ben koshy - hecho. – froadie

Respuesta

9

La solución de Leigh funciona bien y es probable que 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 la carpeta temp. 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 no conecta 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, desde, hacia, la dirección del servidor, etc cuerpo

Si adjunta un archivo verá algo en el fondo de este archivo que tiene este aspecto:

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 juego CF tiempo de ejecución 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 poner 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.

+6

Dos centésimas de un centavo? Tus pensamientos valen más que eso. – ale

+0

Deje de recoger liendres. Estoy tratando de ser útil aquí :) ... ¿o es minucioso? tricotar? –

+1

[¿Tejido de punto?] (Http://i229.photobucket.com/albums/ee2/thinnen/other%20projects/pick_knitting.jpg) :) –

Cuestiones relacionadas