2012-06-01 39 views
1

我們的客戶大多使用MS Outlook,但有時候其他客戶端也會給我們提供從代碼創建新郵件窗口的麻煩。在Citrix環境下發送來自delphi代碼的電子郵件

我們也試過實現一個mailto:alternative,但是使用attachment =「C:\ filename.txt」失敗。

右鍵點擊文件使用發送郵件recepient大多無論如何工作,但我從來沒有找到一種方法來做到這一點的代碼。

有沒有其他的方法來創建一個新的郵件與文件附件?

我們也經歷了由於MAPI代碼整個應用程序崩潰,Windows錯誤漂亮往往給人看起來像這樣的錯誤:

Faulting module name: dhcpcsvc.DLL, version: 6.1.7600.16385, time stamp: 0x4a5bd9b5 
Exception code: 0xc0000005 
Fault offset: 0x00001d00 
Faulting process id: 0x868 
Faulting application start time: 0x01ca7fbc86a3e836 
Faulting application path: C:\Program Files (x86)\Microsoft Office\OFFICE11\OUTLOOK.EXE 
Faulting module path: C:\Windows\system32\dhcpcsvc.DLL 
Report Id: c60fa358-ebaf-11de-8b4f-0026b9486d93 
+0

你可以附上實際的Delphi代碼嗎? –

+0

http://pastebin.com/sMHAEEwP這裏是一個快速粘貼,它在90-95行有錯誤的參數失敗 – Plastkort

回答

0

參見:How can I simulate ‘Send To...’ with Delphi?

代碼顯示瞭如何一個新的「寫郵件」窗口,可以用已經附加的文件被打開,模擬操作系統默認的行動「發送到...'外殼上下文菜單。

+0

我發現一個頁面,有點我看到翻譯到德爾福--- http://mikejustin.wordpress.com/2009/07/03/ how-can-i-simulate-send-to-with-delphi/----我試着稍微修改這個,只是接受一個使用OpenDialog的文件。 http://pastebin.com/ZXpFrPET但我得到一個錯誤消息,說:「錯誤參數」在下面的行(解包)OleCheck(Folder.ParseDisplayName(0,nil,PWideChar(WideString(Files [i])),chEaten, p^[i],dwAttributes)); – Plastkort

0

有沒有其他的方法來創建新的郵件一個文件附件?

是的。您可以使用Indy直接發送:TIdSMTP + TIdMessage + TIdAttachmentFile。

示例代碼:

IdMessage := TIdMessage.Create(nil); 
IdSMTP := TIdSMTP.Create(nil); 
try 
    IdMessage.Subject := 'YourMessageSubject'; 
    IdMessage.Recipients := '[email protected],[email protected]'; 
    IdMessage.CCList := ... 
    IdMessage.BccList := ... 
    IdMessage.Body.Text := 'YourMessageText'; 
    IdSMTP.Host := 'smtp.example.com'; 
    i := 1; 
    TIdAttachmentFile.Create(IdMessage.MessageParts, TFileName('YourAttachmentFileName')); 
    try 
     IdSMTP.Connect; 
     IdSMTP.Send(IdMessage); 
    finally 
     IdSMTP.Disconnect; 
    end; 
finally 
    IdMessage.Free; 
    IdSMTP.Free; 
end; 
+0

缺點:它不打開一個撰寫窗口,它允許編輯文本或從地址簿添加收件人。 – mjn

+1

@mjn:確實如此。如果真正的意圖是使用「MailTo」方法,那麼您的解決方案會更好。如果意圖是發送郵件,而不管客戶端機器是否具有與郵件客戶端相關聯的「MailTo」命令,並且也被正確配置,則可以更直接地發送直接發送方法。 – jfoliveira

+1

我的解決方案(實際上只是兩個其他資源的組合)不依賴於mailto命令關聯 - 請參閱http://www.arstdesign.com/articles/sendtomail.html – mjn