Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用C#代码创建Outlook兼容格式的SQL Server数据备份文件_C#_Sql Server_Outlook_Desktop Application - Fatal编程技术网

如何用C#代码创建Outlook兼容格式的SQL Server数据备份文件

如何用C#代码创建Outlook兼容格式的SQL Server数据备份文件,c#,sql-server,outlook,desktop-application,C#,Sql Server,Outlook,Desktop Application,我想备份SQL Server数据库中的所有电子邮件,并需要使用outlook兼容格式的C#代码创建备份文件。这样就可以在outlook软件中恢复电子邮件 请帮忙 到目前为止,我们已经创建了一个桌面应用程序,我们有一个包含电子邮件的表,其中有一些自定义字段也根据我们的需要 我们对此进行了一些探索,发现以下链接- 我的问题是,我们在数据库中有一些自定义字段,所以它们将如何存储在outlook数据文件中 电子邮件表结构如下所示- 你的描述仍然不够精确 是否要将outlook中的单个电子邮件存储

我想备份SQL Server数据库中的所有电子邮件,并需要使用outlook兼容格式的C#代码创建备份文件。这样就可以在outlook软件中恢复电子邮件

请帮忙

到目前为止,我们已经创建了一个桌面应用程序,我们有一个包含电子邮件的表,其中有一些自定义字段也根据我们的需要

我们对此进行了一些探索,发现以下链接-

我的问题是,我们在数据库中有一些自定义字段,所以它们将如何存储在outlook数据文件中

电子邮件表结构如下所示-


你的描述仍然不够精确

是否要将outlook中的单个电子邮件存储到数据库中,并最终将其作为outlook中的电子邮件返回

那么看起来你已经拥有了你所需要的一切。 Outlook中的MailItem在数据库中的属性与您的属性相似

然后从概念上看应该是这样的: 枚举数据库中每个电子邮件存储区的文件夹和属性,然后删除电子邮件

在恢复已读数据库记录的情况下,创建新的MailItem并将其添加到文件夹中

但是: 我发现字段类型存在一些问题,例如EmailTo nvarchar(100)太小。 此外,您没有所有字段可按1:1还原电子邮件

因此,也就是说,存储msg文件可能是一个不错的选择(可能是对您正在检索的数据的补充)

请详细说明,然后我也可以更好地回答

编辑:

根据您的澄清(仍不确定我是否理解正确): 最简单的方法是使用outlook进行此过程

在outlook pst文件夹中创建,在其中创建电子邮件,然后备份完整的pst文件(然后将所有邮件都放在一个文件中),或者将单独的电子邮件导出到.msg文件(然后每个电子邮件一个文件)

尝试直接从应用程序写入pst文件或msg文件可能非常困难,因为并没有描述这些文件的格式


请确定是否要将Outlook用于此过程。

您可以使用Outlook对象模型及其命名空间.AddStore/方法将新的或现有的PST文件添加到配置文件中,然后(给定返回的存储对象)用文件夹和电子邮件填充它。要存储自定义属性,请使用集合

但是请注意,OOM在服务中不起作用-您需要(C++或Delphi)或(任何语言)来实现这一点。在已发送状态下创建项目也是一项挑战。如果使用是一个选项,它将公开创建(和删除)配置为使用指定PST文件的临时配置文件的。
LogonPstStore
方法。它可以在一个服务中使用。现有Outlook配置文件不受影响

Redemption.RDOSession session = new Redemption.RDOSession();
Redemption.RDOPstStore store = session.LogonPstStore(PstFileName);
Redemption.RDOFolder folder = store.IPMRootFolder.Folders.Add("Backup folder");
RDOMail item = folder.Items.Add("IPM.Note");
item.Sent = true;
item.Subject = "test";
item.Body = "test body";
item.Recipients.AddEx("The User", "user@domain.demo", "SMTP");
item.UserProperties.Add("My custom prop", olText).Value = "custom prop value";
item.Save();

桌面应用程序如何在表中存储数据?扭转这一过程。它是否会抓取每一封电子邮件并将其存储为一个blob?它是否将每段数据提取到自定义字段中?请检查上面给出的表结构。您现有的代码必须使用office API来提取电子邮件。您需要使用Office API来创建它们。没有办法只“还原”它们-这是一种完全自定义的格式,您可以将它们存储在其中。如果您还存储了原始的
.msg
文件,可能会更直截了当。我们使用自定义格式,因为从我们的应用程序中,我们发送和处理的电子邮件与outlook软件类似。我无法提供更多帮助,但基本上outlook支持自定义字段,您可以通过API使用outlook。我看到的问题是,除非你真的再次发送,否则你无法创建“已发送”的电子邮件。也许你可以进一步解释一下-在outlook中生成一堆基于表中数据的邮件有什么用?我们有类似于outlook软件的c#windows应用程序,它可以同步电子邮件,并提供“撰写新邮件”、“回复”和“回复所有邮件”功能。我们必须以outlook兼容的格式,从使用IMAP和POP3服务器的数据库中创建所有电子邮件的备份。以便我们可以在outlook中恢复它们。