我如何通过 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
}