2011-03-31 68 views
1

我目前正在編程一個插件到Outlook 2007,當我試圖序列化一個附件時遇到了一個問題。儘管System.Net.Mail附件具有可用於序列化數據的ContentStream,但Microsoft.Office.Interop.Outlook附件不包含。不幸的是,我可以直接從Outlook獲得的唯一附件類型是Microsoft.Office.Interop.Outlook。我搜索了一下,並沒有找到類似的東西。轉換Microsoft.Office.Interop.Outlook.Attachment到System.Net.Mail.Attachment在c#

MailItem item = getMailObj(e);  
String dataSend = serializeAttachment((System.Net.Mail.Attachment)item.Attachments[1]); 

正如你可以看到,我試圖類型轉換的初始附接,但我被賦予了無效的轉換異常:

無法轉換類型 「系統.__ ComObject」的COM對象類類型 'System.Net.Mail.Attachment'。 代表COM 組件的類型實例不能轉換爲不代表COM組件的類型 ; 然而只要底層COM 組件支持QueryInterface 調用接口的IID,它們就可以轉換爲接口 。

我也不能就這麼把

System.Net.Mail.Attachment newAtt = item.Attachments[1]; 

截至2010年的VisualStudio只是告訴我,類型轉換它。對於如何解決這個問題,有任何的建議嗎?

回答

1

我不認爲這些類型可以鑄造或轉換。只需閱讀Outlook附件的內容並將其寫入Mail.Attachment。

+0

我已經試過這樣做,但不幸的是附件的Microsoft版本不具有ContentStream對我來說,信息轉移到附件的網絡版本。我可以傳輸的唯一屬性是文件名,大小和類型。 – Saynes 2011-04-05 16:01:34

+0

您可以使用GetTemporaryFilePath()http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.attachment.gettemporaryfilepath.aspx或SaveAsFile()http://msdn.microsoft.com/ zh-cn/library/microsoft.office.interop.outlook.attachment.saveasfile.aspx方法來獲取Outlook附件的內容。 – STO 2011-04-05 18:28:07

+0

我嘗試過使用GetTemporaryFilePath(),但當我嘗試使用它時出現以下錯誤'無法在臨時文件夾中訪問此附件。在附件事件中使用此方法來獲取臨時文件路徑。'我也不想用SaveAsFile()保存文件。 – Saynes 2011-04-07 16:46:23

-3

我嘗試此代碼,它的工作:

htmbody = "<HTML><BODY>" 
htmbody = htmbody + "<table border=0>" 
htmbody = htmbody + "<tr>" 
htmbody = htmbody + "<td><img src=C:\temp\filename\place.png></td>"