2012-07-02 52 views
7

Tôi có một hình thức với một tập tin đầu vào:Tại sao tôi không thể đính kèm tệp đã tải lên của mình vào email?

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

tôi gửi biểu mẫu bằng cách sử dụng phương pháp ajaxForm của JQuery form plugin.

Sau đó, trong mã để xử lý bài đăng, tôi đọc và xử lý tệp. Tôi sử dụng cfspreadsheet để đọc tệp trực tiếp từ trường nhập tệp:

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

Tất cả đều hoạt động chính xác.

Tôi cũng quyết định gửi bảng tính qua email cho quản trị viên. Tôi nghĩ tôi có thể thực hiện điều này chỉ đơn giản với một thẻ cfmail bao gồm thẻ cfmailparam sau:

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

Tuy nhiên, điều này không làm việc một cách chính xác - email không được gửi. Tôi đang làm gì sai?

+0

Bạn có thể hiển thị toàn bộ mã CFMAIL của mình không? – BKK

+0

Có thông báo lỗi không? Nếu vậy, nó là cái gì? Nếu không, e-mail có xuất hiện trong thư mục Spool hoặc Undelivr của ColdFusion cài đặt của bạn không? –

+0

@ben koshy - xong. – froadie

Trả lời

9

Giải pháp của Leigh hoạt động tốt và bạn có thể đã triển khai trong mã của mình. Tôi nghĩ tôi sẽ bỏ 0,02 xu của tôi về lý do tại sao đây là một vấn đề để bắt đầu.

Khi bạn tải lên tệp, tệp được đặt ở vị trí thư mục temp. Nếu bạn không làm gì với tệp để đặt nó vào đích cuối cùng, tệp sẽ bị xóa - có thể là vào cuối yêu cầu của bạn.

Trong khi đó cfmailparam không thực sự đính kèm tệp vào thời gian chạy. Nó để nó vào quá trình bộ đệm để làm điều đó. Nếu bạn có một cái nhìn trong ColdFusion của bạn cài đặt "thư/spool" thư mục bạn sẽ thấy một tập tin với phần mở rộng .cfmail. Nếu bạn không thể "bắt" một cái trước khi giao hàng, hãy kiểm tra thư mục chưa gửi được của bạn - có ràng buộc là một số ít treo xung quanh đó.

Tệp .cfmail đóng vai trò như một hướng dẫn cho dịch vụ bộ đệm gửi thư. Nó có một chủ đề, từ, đến, địa chỉ máy chủ, cơ thể vv

Nếu bạn đính kèm một tập tin, bạn sẽ thấy một cái gì đó ở dưới cùng của tập tin này trông như thế này:

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

Tại grabs CF runtime tập tin này và làm những gì Leigh đang đề xuất - đặt nó như là nhị phân với một mailpart (base64 được mã hóa) vào phần chính của thông điệp. Vì vậy, những gì đang xảy ra là do thời gian dịch vụ bộ đệm được xung quanh để cố gắng mở và đính kèm tệp này, tệp đã biến mất lâu vì yêu cầu đã kết thúc. Tôi cũng nghĩ rằng các tập tin tồn tại với một phần mở rộng ".tmp" trong thư mục tạm thời này - đó rõ ràng không phải là những gì bạn muốn đính kèm (nhưng đó có thể là một phiên bản trước đó của CF).

Để khắc phục, trước tiên hãy sử dụng cffile với hành động "tải lên" để đặt tệp vào thư mục thực (thay vì tạm thời) trên đĩa. Sau đó sử dụng cfmailparam để đính kèm tệp. LƯU Ý: Thuộc tính "remove" được đặt thành yes sẽ khiến CF xóa tệp sau khi nó gửi thành công thư - đó là hiệu ứng tôi tin bạn đang tìm kiếm.

+6

Hai phần trăm của một xu? Suy nghĩ của bạn đáng giá hơn thế. – ale

+0

Dừng chọn nit. Tôi đang cố gắng để được hữu ích ở đây :) ... hoặc là nó nitpicking? đan-hái? –

+1

[Chọn lựa đan?] (Http://i229.photobucket.com/albums/ee2/thinnen/other%20projects/pick_knitting.jpg) :) –

Các vấn đề liên quan