2012-07-02 8 views
7

У меня есть форма с входным файлом:Почему я не могу прикрепить загруженный файл к электронному письму?

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

отправленной формой с помощью метода ajaxForm в JQuery form plugin.

Затем в коде для обработки сообщения я прочитал и обработал файл. Я использую cfspreadsheet для чтения файла непосредственно из поля ввода файла:

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

Это все работает правильно.

Я решил, что также хочу отправить электронную почту электронной почте администратору. Я думал, что я мог бы сделать это просто с cfmail тег, который включает в себя следующие cfmailparam тег:

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

Однако, это не работает правильно - электронная почта не отправляется. Что я делаю не так?

+0

Не могли бы вы показать весь код CFMAIL? – BKK

+0

Есть ли сообщение об ошибке? Если так, то, что это? Если нет, появляется ли электронная почта в папках Spool или Undelivr для установки ColdFusion? –

+0

@ben koshy - сделано. – froadie

ответ

9

Решение Leigh хорошо работает, и вы, вероятно, уже реализовали его в своем коде. Я думал, что поставил бы 0.02 центов на вопрос, почему это проблема для начала.

При загрузке файла файл находится в папке temp. Если вы ничего не сделаете с файлом, чтобы поместить его в конечный пункт назначения, файл будет удален - возможно, в конце вашего запроса.

Между тем cfmailparam фактически не прикрепляет файл во время выполнения. Это приводит к тому, что процесс буферизации делает это. Если вы посмотрите в каталоге ColdFusion «mail/spool», вы увидите файл с расширением .cfmail. Если вы не можете «поймать» один из них перед доставкой, проверьте свою папку, которая не может быть доставлена, там должно быть несколько висящих там.

Файл .cfmail служит инструкцией службе спулера, которая отправляет почту. Она имеет предмет, из, к, адрес сервера, тела и т.д.

Если вы вложите файл, вы увидите что-то в нижней части этого файла, который выглядит следующим образом:

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

Во время выполнения CF грейферов этот файл и делает то, что предлагает Ли - помещает его как двоичный с почтовым ящиком (закодированным base64) в основную часть сообщения. Так что происходит, так это то, что к тому времени, когда служба спулера обойдется, пытаясь открыть и прикрепить этот файл, файл уже давно ушел, потому что запрос закончился. Я также думаю, что файл существует с расширением «.tmp» в этом временном каталоге - это явно не то, что вы хотите присоединить (но это может быть предыдущая версия CF).

Чтобы исправить это, сначала используйте cffile с действием «загрузить», чтобы поместить файл в настоящую (вместо временной) папку на диске. Затем используйте файл cfmailparam для прикрепления файла. ПРИМЕЧАНИЕ. Атрибут «удалить», заданный как «да», заставит CF удалить файл после того, как он успешно отправил письмо, что является тем эффектом, который, как я считаю, вы ищете.

+6

Две сотых процента? Ваши мысли стоят того больше. – ale

+0

Стоп-нит-подбор. Я пытаюсь быть полезной здесь :) ... или это nitpicking? трикотажные собирание? –

+1

[Вязание-сбор?] (Http://i229.photobucket.com/albums/ee2/thinnen/other%20projects/pick_knitting.jpg) :) –