我正在尝试将数据库中的特定列导出到文件中。该列包含由 Maximizer Outlook 插件保存的 BLOB 数据。 根据我的研究,该列
VARCHAR(MAX)
的数据似乎被编码为“OLE”。
现在我可以非常自信地导出数据库中的其他所有内容以及该列中的某些类型(PDF、DOC),但无法导出已保存的电子邮件内容。
我已尝试将普通 BLOB 写入假定的扩展名,例如 .msg。这适用于 PDF en DOC 文件,但不适用于电子邮件内容。读取 BLOB 数据并将其放入 HTML 文件使其具有一定的可读性,因为邮件内容包含 HTML,但我无法看到附件。
我尝试将数据解析为
php_mailparse
。没有运气。
我还使用一些 SQL 查询直接从 SQL Server 导出和构建文件,但只能正确处理 PDF 和 DOC。
我还用 C# 构建了一个提取方法,希望运气好。
特别是保存在 BLOB 中的电子邮件内容不想以可用的方式导出。
大家有什么想法吗?
这是我使用过的SQL。
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE;
DECLARE @outPutPath varchar(50) = 'C:\export'
, @i bigint
, @init int
, @data varbinary(max)
, @fPath varchar(max)
, @folderPath varchar(max)
DECLARE @Doctable TABLE (id int identity(1,1), [Data_Machine_Id] varchar(100) , [Sequence_Number] varchar(100), [TextCol] varBinary(max) )
INSERT INTO @Doctable([Data_Machine_Id] ,[TextCol])
Select [Data_Machine_Id],[TextCol] FROM [dbo].[AMGR_Letters_Tbl]
WHERE [Client_Id] = '160505111841583611250C' AND [Sequence_Number] = '329002';
--SELECT * FROM @table
SELECT @i = COUNT(1) FROM @Doctable
WHILE @i >= 1
BEGIN
SELECT
@data = [TextCol],
@fPath = @outPutPath + '\' + '\' + 'test.msg',
@folderPath = @outPutPath + '\'
FROM @Doctable WHERE id = @i
--Create folder first
EXEC sp_OACreate 'ADODB.Stream', @init OUTPUT; -- An instace created
EXEC sp_OASetProperty @init, 'Type', 1;
EXEC sp_OAMethod @init, 'Open'; -- Calling a method
EXEC sp_OAMethod @init, 'Write', NULL, @data; -- Calling a method
EXEC sp_OAMethod @init, 'SaveToFile', NULL, @fPath, 2; -- Calling a method
EXEC sp_OAMethod @init, 'Close'; -- Calling a method
EXEC sp_OADestroy @init; -- Closed the resources
print 'Document Generated at - '+ @fPath
--Reset the variables for next use
SELECT @data = NULL
, @init = NULL
, @fPath = NULL
, @folderPath = NULL
SET @i -= 1
END
我发现,如果将“电子邮件消息”文档保存为“.eml”而不是“.msg”,则可以保存它们