我目前在XP上使用Delphi 7,但我想最終將代碼遷移到Win8上的DXE。JCLMAPI Delphi非模態電子郵件彈出
我想發送電子郵件使用JCL,使用JCLMAPI具體。我嘗試在JCLMAPI單元中使用JclSimpleSendMail
例程。這是通話的界面。
function JclSimpleSendMail(const Recipient, Name, Subject, Body: AnsiString; const Attachment: TFileName; ShowDialog: Boolean; ParentWND: THandle; const ProfileName: AnsiString; const Password: AnsiString): Boolean;
問題是它以模態方式彈出默認的MAPI客戶端消息框(在我的情況下,Outlook 2010)。我希望它只是打開電子郵件消息窗口,但允許用戶繼續在Delphi應用程序中工作。直到他們準備好發送,例如,如果用戶想要在發送電子郵件之前繼續在德爾福應用程序中工作。這可能嗎?
我注意到有在TJCLEmail一個ParentHWND財產,我試圖設置是零(我知道這是一個範圍),但我希望刪除父手柄可能會改變模式行爲(沒有運氣!)
function TForm1.SimpleSendHelper2(const ARecipient, AName, ASubject, ABody: AnsiString; const AAttachment: TFileName;
AShowDialog: Boolean; AParentWND: THandle; const AProfileName, APassword, AAddressType: AnsiString): Boolean;
var
AJclEmail: TJclEmail;
begin
AJclEmail := TJclEmail.Create;
try
**AJCLEmail.ParentWnd := 0; //TRIED FORCING THE ATTACHED HANDLE TO ZERO**
*//if AParentWND <> 0 then
// AJclEmail.ParentWnd := AParentWND;*
if ARecipient <> '' then
AJclEmail.Recipients.Add(ARecipient, AName, rkTO, AAddressType);
AJclEmail.Subject := ASubject;
AJclEmail.Body := ABody;
if AAttachment <> '' then
AJclEmail.Attachments.Add(AnsiString(AAttachment));
if AProfileName <> '' then
AJclEmail.LogOn(AProfileName, APassword);
Result := AJclEmail.Send(AShowDialog);
finally
AJclEmail.Free;
end;
end;
這也成功地打開了默認的MAPI應用程序並填寫了所有傳遞的信息(TO,Subject,Body,Attachment)。不幸的是,它仍然以模態方式打開消息框。
最後,我也嘗試了代碼http://www.delphifaq.com/faq/delphi/network/f236.shtml這段代碼只是直接使用MAPI(沒有JCL)。不幸的是,它也以模態方式彈出消息框。
有關如何以非模態方式打開默認MAPI客戶端的任何想法?
謝謝!
請注意,使用MAPI發送電子郵件不一定是最佳解決方案。例如,當安裝64位Outlook時,32位應用程序無法使用MAPI。 –
@Andy MAPISendMail應該可以在任何情況下工作,即使是安裝了64位Outlook的32位應用程序:http://msdn.microsoft.com/en-us/library/office/dd941355(v=office.15).aspx –
@AndreiGalatyn該文章僅適用於Windows 7,不適用於任何其他64位操作系統。 –