7

ファイル入力のあるフォームがあります:

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

JQueryフォームプラグインのajaxFormメソッドを使用してフォームを送信します。

次に、投稿を処理するコードで、ファイルを読み取って処理します。cfspreadsheetを使用して、ファイル入力フィールドから直接ファイルを読み取ります。

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

これはすべて正しく機能します。

スプレッドシートを管理者にもメールで送信することにしました。次のcfmailparamタグを含むcfmailタグを使用するだけで、これを実現できると思いました。

<cfmail to="myEmailAddress@email.com" 
        from="fromEmail@email.com" 
        subject="Upload File" type="HTML">
    <cfmailparam file="#form.uploadFile#" />
    File processed successfully
</cfmail>

ただし、これは正しく機能していません。電子メールは送信されません。私は何が間違っているのですか?

4

1 に答える 1

9

Leighのソリューションはうまく機能し、おそらくコードにすでに実装されています。そもそもなぜこれが問題なのか、0.02セント入れたいと思いました。

ファイルをアップロードすると、ファイルは一時フォルダーの場所に配置されます。ファイルを最終的な宛先に配置するために何もしなかった場合、ファイルは削除されます-おそらくリクエストの最後に。

一方、cfmailparamは、実行時に実際にファイルを添付しません。それを行うのはスプーラプロセスに任されています。ColdFusionがインストールする「mail/spool」ディレクトリを確認すると、拡張子が.cfmailのファイルが表示されます。配達前に1つを「キャッチ」できない場合は、配達不能フォルダーを確認してください。そこにはいくつかのぶら下がっているはずです。

.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はこのファイルを取得し、Leighが提案していることを実行します。メッセージの本文にメールパーツ(base64でエンコード)を含むバイナリとしてファイルを配置します。したがって、何が起こっているのかというと、スプーラーサービスがこのファイルを開いて添付しようとするまでに、要求が終了したためにファイルが長い間失われているということです。また、ファイルはこの一時ディレクトリに「.tmp」拡張子で存在すると思います。これは明らかに添付したいものではありません(ただし、これは以前のバージョンのCFである可能性があります)。

これを修正するには、最初に「アップロード」アクションでcffileを使用して、ファイルをディスク上の実際の(一時的ではなく)フォルダーに配置します。次に、cfmailparamを使用してファイルを添付します。注:「remove」属性をyesに設定すると、CFはメールの送信に成功すると、ファイルを削除します。これは、あなたが探している効果だと思います。

于 2012-07-03T13:20:28.620 に答える