2008-12-11 123 views
1

我正在處理一個應用程序,我需要將郵箱中的郵件轉移到anoter one.I不能使用smtp發送這些郵件,因爲這會更改標題信息。我使用C#和out look api來處理郵件。以任何方式我可以將郵件轉移到其他郵箱而不用更改郵件標題。將郵件轉移到其他郵箱


通過轉移我的意思是,我需要從一個信箱取郵件和移動這個到另一個郵箱不改變任何頭信息。如果我使用smtp,標題信息將會改變。我已經聽說使用MAPI郵件可以從一個郵箱移動到另一個郵箱。任何指針。

+0

爲什麼你不能更改標題? – 2008-12-11 11:16:48

+0

,因爲在移動這些郵件之前,標題信息將被記錄在一個數據庫中,稍後將用於檢索郵件。將郵件移動到其他郵箱的原因在於該郵箱上正在運行一個進程,該進程將郵箱中的所有郵件發送到保留服務器。 – Kapil 2008-12-11 13:44:36

回答

1

如果無法將所有相關郵箱加載到單個Outlook配置文件中,則無法使用Outlook API解決此問題。但是,應該可以通過直接通過擴展MAPI訪問Exchange信息存儲的管理帳戶運行獨立應用程序。然後,您可以依次打開源郵箱並將相關郵件移動到目標郵箱。

這將允許您在單個巨型操作中運行批量作業,從中央位置收集所有郵箱。但是,如果你的任務是移動消息,那麼可能通過安裝在源機器上的Outlook插件以更加分散的方式解決這個問題可能是一個更明智的方法。也許如果你告訴我們更多關於移動這些物品的動機,我們可以提出更好的解決方案。

如果你採用集中收割機的方法,我強烈建議使用像Redemption這樣的幫助庫,否則在收集足夠的知識來解決任務之前可能需要幾個月的時間。 RDO框架(Redemption Data Objects)應該特別適合讓你儘快運行。

0

如果您使用Outloook API,我確定支持備份和恢復。所以從一個賬戶備份你的郵件並在另一個賬戶上恢復。這將是我的第一次嘗試。 PS:我不熟悉API。

0

郵箱是什麼關係?他們在同一臺Exchange服務器上嗎?如果是這樣,您最好的選擇是使用MAPI複製郵件。如果沒有,您可以將郵件導出到PST或一組.msg文件。這是否需要自動化?

0

你是什麼意思的「轉移」?如果您正在討論將郵件從一個郵箱拖放到同一個Outlook配置文件中的另一郵箱,則只需使用MailItem.Move方法即可。

0

然後,您需要的是MAPI。這是一個非常複雜的API。有一本關於它的絕版書,但就是這樣。最好的下載地點是下載MFCMapi並觀察你可能如何做你需要的東西,例如打開兩個用戶的郵箱並在它們之間複製一條消息。然後,查看MFCMapi的源代碼,看看它是如何完成的,並從那裏開始工作。

2

我能夠使用兌換將郵件從一個郵箱移動到另一個郵箱。這就像從一個郵箱到另一個郵箱的複製郵件。首先使用兌換登錄到目標郵箱。 獲取要移動郵件的文件夾的引用。就我而言,它是收件箱。現在將Outlook郵件項目轉換爲RDOMail並將rdomail複製到目標文件夾。這裏的代碼是 -

rdoSession.LogonExchangeMailbox("TEST", "ServerName"); 
RDOExchangeMailboxStore mailBoxStore = (Redemption.RDOExchangeMailboxStore) 
rdoSession.Stores.DefaultStore; 
RDOFolder inboxFolder = null; 

      foreach (RDOFolder rdoFolder in mailBoxStore.IPMRootFolder.Folders) 
      { 
       if (rdoFolder.Name.Equals("Inbox", StringComparison.InvariantCultureIgnoreCase)) 
       { 
        inboxFolder = rdoFolder; 
        break; 
       } 
      } 
      rdoMail.CopyTo(inboxFolder); 

有了這個,郵件將被複制到新的郵箱而不會改變任何頭信息。

相關問題