C# 如何在数据库中存储带有附件的电子邮件

C# 如何在数据库中存储带有附件的电子邮件,c#,save,email-attachments,eml,C#,Save,Email Attachments,Eml,在我的程序中,我通过拖放到表单上接收.eml文件 我能够毫无问题地存储此文件。此外,当重新打开已删除的.eml文件的(副本)时,我可以在默认应用程序(即默认邮件客户端)中打开它 我可以看到附件,但是,当试图打开它们时,什么也没有发生 有没有办法将邮件附件封装到.eml文件中 我知道我可以简单地将附件文件存储在某个地方,但随后,我必须修改.eml以考虑新的位置,这是一个麻烦,在我的情况下,我真的希望避免 编辑: -存储.eml文件的方法是将文件转换为字节[]数组,然后将其存储到数据库中 byte[

在我的程序中,我通过拖放到表单上接收
.eml
文件

我能够毫无问题地存储此文件。此外,当重新打开已删除的
.eml
文件的(副本)时,我可以在默认应用程序(即默认邮件客户端)中打开它

我可以看到附件,但是,当试图打开它们时,什么也没有发生

有没有办法将邮件附件封装到
.eml
文件中

我知道我可以简单地将附件文件存储在某个地方,但随后,我必须修改
.eml
以考虑新的位置,这是一个麻烦,在我的情况下,我真的希望避免

编辑: -存储
.eml
文件的方法是将文件转换为
字节[]
数组,然后将其存储到数据库中

byte[] savedToDB = File.ReadAllBytes(docPath);
通过以下(伪)代码预览文件:

1) 从数据库加载
字节[]
数组

2) 使用以下代码另存为临时文件:

string tmpPath = System.IO.Path.GetTempFileName().Replace(".tmp", ".eml");  
using (FileStream fs = new FileStream(tmpPath, FileMode.Create, FileAccess.Write)) {  
      fs.Write(bytesFromDB, 0, bytesFromDB.Length);  
      fs.Close();  
}  
File.SetAttributes(@tmpPath, File.GetAttributes(tmpPath) | FileAttributes.Temporary);  
if (File.Exists(tmpPath)) {  
    System.Diagnostics.Process p = System.Diagnostics.Process.Start(path);  
}
更新2 问题似乎在于我显示文件的方式,而不是存储文件的方式

实际上,我的代码如下:

// see code above for storing the temporary file...
// replace the following line 
// System.Diagnostics.Process p = System.Diagnostics.Process.Start(path);  
// by following code...
var worker = new BackgroundWorker();
    worker.WorkerReportsProgress = false;
    worker.WorkerSupportsCancellation = false;
    worker.DoWork += (s, e) => {
      System.Diagnostics.Process p = System.Diagnostics.Process.Start(path);
      // wait 1 second at least!
      System.Threading.Thread.Sleep(1000);
      p.WaitForExit();
    };
    worker.RunWorkerCompleted += (s, e) => {
      File.Delete(path);
    };
问题是,
BackgroundWorker
在预览窗口仍处于打开状态时终止,这会删除临时文件,因此附件的路径丢失

所以我的问题是:是否有一种适当的方法来确保文件关闭后被删除?如果没有,系统是否会自动刷新临时文件(临时文件夹中),如果是,何时刷新


我需要确保打开的文件没有堆积到客户端的磁盘上…

eml应该包含附件。你能打开原始文件上的附件吗?我确认,附件会在原始邮件上打开,但不会在存储的电子邮件上打开。我更新我的评论,可能是因为我存储和还原文档的方式……因此,您可以从原始的.eml文件中打开附件,但当您将其保存到其他地方,然后将其取回(作为.eml)并尝试打开时,您无法看到附件?请提供更多详细信息(如相关代码)关于如何保存文件。能否确认只有outlook已打开时才会出现问题?关闭outlook时测试代码。