我如何通过 golang 或其他语言将 ews get item body 传输到 pst 文件,但 c#
how can i transfer ews get item body to pst file via golang or other language but c#
现在,我正在尝试导出电子邮件数据。导出的数据会导入到outlook本地查看,但服务器。
我已阅读文档 enter link description here。
我可以使用 golang 或 cmd 工具将 ews 数据 (export-item/get-item) 传输到 pst 文件吗?
谢谢!
不直接在 EWS 中。您可以使用 EWS 导出 MIME 内容,然后使用您自己的 MIME 解析器将其导入 PST 文件,IConverterSession built-in MIME converter (C++ or Delphi only, only works when tuning inside the outlook.exe process) or Redemption (any language, I am its author, use RDOMail.Import(..., olRfc822)
).
但请注意,MIME 不是高保真格式,所有 MAPI-specific 属性都将丢失。快速传输流格式保留所有属性,但未记录。您可以使用 ExportItems
EWS 请求导出项目,并使用 Redemption and RDOMail.Import(..., olFTS)
. A PST file can be created using RDOSession.LogonPstStore
, you can then create folders (RDOFolder.Folders.Add
starting with RDOStore.RootIPMFolder
) 和消息 (RDOFolder.Items.Add
) 将它们导入 PST(或任何其他消息)。
我有 success.The 方法 LogonPstStore params 加密应该是 0 以便 mac outlook 可以导入它。
Golang代码:
func main() {
ole.CoInitialize(0)
session, err := oleutil.CreateObject("Redemption.RDOSession")
if err != nil {
fmt.Println(err)
return
}
s, err := session.QueryInterface(ole.IID_IDispatch)
if err != nil {
fmt.Println(err)
return
}
// create a pst file
p := `E:\go_project\src\github.com\outlook-ical-export\redemption\t22.pst`
store, err := oleutil.CallMethod(s, "LogonPstStore", p, 1, "", "", 0)
if err != nil {
fmt.Println(store, err)
return
}
// get a folder object
inbox, err := s.CallMethod("GetDefaultFolder", 6)
if err != nil {
fmt.Println(inbox, err)
return
}
stores := oleutil.MustGetProperty(s, "Stores").ToIDispatch()
defaultStore := oleutil.MustGetProperty(stores, "DefaultStore").ToIDispatch()
IPMRootFolder := oleutil.MustGetProperty(defaultStore, "IPMRootFolder").ToIDispatch()
IPMFolders := oleutil.MustGetProperty(IPMRootFolder, "Folders").ToIDispatch()
newFolder := oleutil.MustCallMethod(IPMFolders, "Add", "test22").ToIDispatch()
newFolderItems := oleutil.MustGetProperty(newFolder, "Items").ToIDispatch()
RDOMail, err := newFolderItems.CallMethod("Add", "IPM.Note")
if err != nil{
fmt.Println(RDOMail, err)
return
}
data := "base64"
ftsDataPath:= `E:\go_project\src\github.com\outlook-ical-export\redemption\test22.txt`
d, err := base64.StdEncoding.DecodeString(data)
err = ioutil.WriteFile(ftsDataPath, d, 0644)
if err != nil {
panic(err)
}
_, err = RDOMail.ToIDispatch().CallMethod("Import", ftsDataPath, 1034)
if err != nil{
panic(err)
}
_, err = RDOMail.ToIDispatch().CallMethod("Save")
if err != nil{
panic(err)
}
_, err = defaultStore.CallMethod("Remove")
if err != nil{
panic(err)
}
v, err := s.GetProperty("FastShutdownSupported")
if err != nil{
fmt.Println(err)
}
if v.Value() != nil && v.Value().(bool){
_, err = s.CallMethod("DoFastShutdown")
if err != nil{
fmt.Println(err)
}
}else {
_, err = s.CallMethod("Logoff")
if err != nil{
fmt.Println(err)
}
}
return
}
现在,我正在尝试导出电子邮件数据。导出的数据会导入到outlook本地查看,但服务器。 我已阅读文档 enter link description here。 我可以使用 golang 或 cmd 工具将 ews 数据 (export-item/get-item) 传输到 pst 文件吗? 谢谢!
不直接在 EWS 中。您可以使用 EWS 导出 MIME 内容,然后使用您自己的 MIME 解析器将其导入 PST 文件,IConverterSession built-in MIME converter (C++ or Delphi only, only works when tuning inside the outlook.exe process) or Redemption (any language, I am its author, use RDOMail.Import(..., olRfc822)
).
但请注意,MIME 不是高保真格式,所有 MAPI-specific 属性都将丢失。快速传输流格式保留所有属性,但未记录。您可以使用 ExportItems
EWS 请求导出项目,并使用 Redemption and RDOMail.Import(..., olFTS)
. A PST file can be created using RDOSession.LogonPstStore
, you can then create folders (RDOFolder.Folders.Add
starting with RDOStore.RootIPMFolder
) 和消息 (RDOFolder.Items.Add
) 将它们导入 PST(或任何其他消息)。
我有 success.The 方法 LogonPstStore params 加密应该是 0 以便 mac outlook 可以导入它。 Golang代码:
func main() {
ole.CoInitialize(0)
session, err := oleutil.CreateObject("Redemption.RDOSession")
if err != nil {
fmt.Println(err)
return
}
s, err := session.QueryInterface(ole.IID_IDispatch)
if err != nil {
fmt.Println(err)
return
}
// create a pst file
p := `E:\go_project\src\github.com\outlook-ical-export\redemption\t22.pst`
store, err := oleutil.CallMethod(s, "LogonPstStore", p, 1, "", "", 0)
if err != nil {
fmt.Println(store, err)
return
}
// get a folder object
inbox, err := s.CallMethod("GetDefaultFolder", 6)
if err != nil {
fmt.Println(inbox, err)
return
}
stores := oleutil.MustGetProperty(s, "Stores").ToIDispatch()
defaultStore := oleutil.MustGetProperty(stores, "DefaultStore").ToIDispatch()
IPMRootFolder := oleutil.MustGetProperty(defaultStore, "IPMRootFolder").ToIDispatch()
IPMFolders := oleutil.MustGetProperty(IPMRootFolder, "Folders").ToIDispatch()
newFolder := oleutil.MustCallMethod(IPMFolders, "Add", "test22").ToIDispatch()
newFolderItems := oleutil.MustGetProperty(newFolder, "Items").ToIDispatch()
RDOMail, err := newFolderItems.CallMethod("Add", "IPM.Note")
if err != nil{
fmt.Println(RDOMail, err)
return
}
data := "base64"
ftsDataPath:= `E:\go_project\src\github.com\outlook-ical-export\redemption\test22.txt`
d, err := base64.StdEncoding.DecodeString(data)
err = ioutil.WriteFile(ftsDataPath, d, 0644)
if err != nil {
panic(err)
}
_, err = RDOMail.ToIDispatch().CallMethod("Import", ftsDataPath, 1034)
if err != nil{
panic(err)
}
_, err = RDOMail.ToIDispatch().CallMethod("Save")
if err != nil{
panic(err)
}
_, err = defaultStore.CallMethod("Remove")
if err != nil{
panic(err)
}
v, err := s.GetProperty("FastShutdownSupported")
if err != nil{
fmt.Println(err)
}
if v.Value() != nil && v.Value().(bool){
_, err = s.CallMethod("DoFastShutdown")
if err != nil{
fmt.Println(err)
}
}else {
_, err = s.CallMethod("Logoff")
if err != nil{
fmt.Println(err)
}
}
return
}