2016-11-06 9 views
0

電子メールにカスタムファイルを添付しようとしています。以下のコードは、暗号化されたファイルを作成し、そのファイルを電子メールに添付しようとするバッチファイルを呼び出します。バッチファイルはファイルを正常に作成しますが、アタッチしようとするとファイルが存在しないと表示されます。私は、あなたがメモリバッファを作成するか、同じスレッドにアタッチする必要があることを読んで、私はそれを思ってみましたが、今は本当に困っています。誰も助けることができますか?C#:電子メールにカスタムファイル(.sl)を添付します。

コード:

   string file = @"C:\EncryptedFile\file.sl"; 

       //EXECUTE BATCHFILE SUPPLYING PARAMETERS TO IT 
       Process process = new Process(); 
       process.StartInfo.Arguments = string.Format("{0} {1} {2} {3}", 
              file, 
              key, 
              doc1, 
              doc2); 
       process.StartInfo.FileName = MyBatchFile; 
       process.StartInfo.UseShellExecute = false; 
       process.StartInfo.CreateNoWindow = true; 
       process.Start(); 

       //attach to email 
       Attachment attachment; 
       attachment = new Attachment(file); 
       mail.Attachments.Add(attachment); 

エラー:

System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\EncryptedFile\file.sl'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) at System.Net.Mail.AttachmentBase.SetContentFromFile(String fileName, String mediaType) at System.Net.Mail.AttachmentBase..ctor(String fileName) at System.Net.Mail.Attachment..ctor(String fileName)

ありがとう!

+0

添付ファイルのコードが呼び出されているときにデバッグポイント(バッチファイルの実行を停止する)を置いてチェックしましたか? また、2つのバッチファイルを作成することをお勧めします。 1つはファイルを作成し、もう1つはメールに添付することです。最初のバッチファイルの実行の最後に2番目のバッチファイルを呼び出すことができます。これは、ファイルが正しく作成されなくなるまで待っています。 –

答えて

1

例外はかなり明確です。添付ファイルが作成された瞬間にファイルが存在しなかったことを意味します。 私はあなたのコードを変更します:

  1. ユーティリティプロセスの終了を待ちます。それがなければ、バッチファイルが作成する前に添付ファイルを作成します。
  2. 終了コードを確認する(バッチがサポートしている場合)
  3. バッチが何らかの理由でファイルを作成しなかった場合の状況を処理するために、添付ファイルを作成する前にファイルを確認してください。
+0

これを行う方法を示すコードを提供しますか? – Prisoner

+0

こんにちは、ありがとうございました.1番は実装が簡単で、機能しました。私が必要としたのは、process.WaitForExit();添付ファイルを追加する前にそれは働いた!私は答えとしてあなたのコメントをマークしますが、私は十分な担当者がありません。 – Raidenlee

+0

メールのsend()が完了してから移動するのを待つ方法を知っていますか?メールが送信された後に暗号化されたファイルを削除しようとしていますが、「ファイルが使用中です」というエラーが表示されています(明らかにメールを使用している間にファイルを削除しようとしていますので、か何か)。 – Raidenlee

関連する問題