2017-07-19 175 views
1

我正在處理一個問題,我的項目,當我點擊按鈕,一個默認的電子郵件客戶端應該彈出,如果有附件,它應該會自動附加到默認電子郵件這樣的客戶端。如何打開默認的電子郵件客戶端附件

enter image description here

我已經嘗試了很多方法如何做到這一點。首先,我使用MAPI,但MAPI無法檢測到,即使我已經控制面板中設置默認的電子郵件客戶端,它顯示

enter image description here

enter image description here

我已經在網上搜索關於這兩個消息框這些錯誤,但沒有明確或明確的答案給我。 HERE'S我在MAPI中使用的代碼。

我還使用mail:to協議來調用默認的電子郵件客戶端,使用這行代碼處理上述協議。

Dim proc As System.Diagnostics.Process = New System.Diagnostics.Process() 

      Dim filename = Convert.toChar(34) & "C:\USERS\JOSHUA~1.HER\DOWNLO~1\ASDPOR~1.PDF" & Convert.toChar(34) 
      Debug.Writeline(filename) 
      Dim asd As String = String.Format("mailto:[email protected]?subject=hello&body=love my body&Attach={0}", filename) 
      proc.StartInfo.FileName = asd 
      proc.Start() 

但仍然沒有運氣。我閱讀了一個線程,mail:to不再處理附件,但是這行代碼打開了我的默認電子郵件客戶端的正文和主題,但沒有附件。在filename變量方面,我已經嘗試過每種路徑格式,我讀到應該使用8.3路徑格式。但仍然不起作用。

我使用的最後一種方法是擴展System.Net.MailMessage.MailMessage()以下THIS答案。這在打開默認電子郵件客戶端並將附件附加到郵件方面起作用,但這是不可編輯的,並且默認電子郵件客戶端上沒有發送按鈕,因爲這行代碼僅生成一個.eml文件並將其打開。我正在考慮解析eml文件,但我仍然不知道如何以新的消息形式逐步打開默認的電子郵件客戶端。這裏的照片

enter image description here

你們有什麼想法如何實現這一目標?謝謝!

+0

您是否嘗試過使用帶有ApartmentState.STA的新ThreadStart的MAPI方法?這是我能夠爲我工作的唯一途徑。 –

回答

0

恐怕對於任何郵件客戶端來說,使用某種通用方法是不可能的。但是您可以使用System.Net.Mail.SmtpClient和一些簡單的自定義用戶界面輕鬆創建自己的解決方案。

+0

如果我做了一個自定義用戶界面,那麼我需要使用'authkey'才能登錄他們的個人電子郵件? – Rich

+0

如果你只想發送郵件,那麼你只需要知道SMTP服務器的憑證。但請記住,使用SmtpClient發送的任何內容都不會存在於他們的郵箱中(它是由郵件客戶端以外的東西發送的)。 –

+0

我希望用戶手動發送郵件,我只想打開他們的郵件客戶端並選擇附件。實際上,大多數人的默認電子郵件客戶端是Windows 10中的Mail,因爲他們中的大多數不會安裝其他郵件客戶端,所以在技術上我想特定於該應用程序如何使用附件打開新郵件。如果我製作一個自定義的郵件客戶端,我想我需要在Google,Yahoo等的'authkey'上工作,才能使用他們的賬戶發送一封電子郵件。你怎麼看? – Rich

相關問題