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时测试代码。