05. december 2005 - 09:55Der er
14 kommentarer og 1 løsning
Fejl i MapiSendMail med Outlok 2003 og Windows XP SP2
Vi vedligeholder en gammel Delphi applikation, som åbner en mail via et kald til MAPI metoden MapiSendMail. Dette har fungeret fint i flere år, men i kombinationen Windows XP og Outlook 2003, fejler det. Når man åbner egeneskaber i Til feltet ser det ud som om feltet Email-type er blevet overskrevet med modtageradressen. Hvis vi anvender f.eks Notes som Emailklient virker det fint. Nogen der har været ude for noget lign. eller har et hint? Mvh Erik
jeg bruger selv denne procedure som virker fint i xp sp2....
procedure MapiSendMail(const Recipient, Subject, Body, AttachedFile: string); var MapiMessage: TMapiMessage; lpRecipient: TMapiRecipDesc; FileAttach: TMapiFileDesc; SM: TFNMapiSendMail; MAPIModule: HModule; Err: integer; begin FillChar(MapiMessage, SizeOf(MapiMessage), 0); if (Subject <> '') then MapiMessage.lpszSubject := PChar(Subject);
if (Body <> '') then MapiMessage.lpszNoteText := PChar(Body);
if (Recipient <> '') then begin FillChar(lpRecipient, SizeOf(lpRecipient), 0); lpRecipient.ulRecipClass := MAPI_TO; lpRecipient.lpszName := PChar(Recipient); lpRecipient.lpszAddress := PChar(Recipient); MapiMessage.nRecipCount := 1; MapiMessage.lpRecips := @lpRecipient; end;
if AttachedFile <> '' then begin MapiMessage.nFileCount := 1; FillChar(FileAttach, SizeOf(FileAttach), 0); FileAttach.nPosition := Cardinal($FFFFFFFF); FileAttach.lpszPathName := PChar(AttachedFile); MapiMessage.lpFiles := @FileAttach; end;
MAPIModule := LoadLibrary(PChar(MAPIDLL)); try if MAPIModule = 0 then raise Exception.Create('MAPI understøttes ikke i dette system'); @SM := GetProcAddress(MAPIModule, 'MAPISendMail'); if @SM = nil then raise Exception.Create('MAPISendmail ProcAddress not found'); Err := SM(0, Application.Handle, MapiMessage, MAPI_DIALOG or MAPI_LOGON_UI, 0); if Err <> 0 then raise Exception.Create('MAPI fejl ved forsendelse af post (' + IntToStr(Err) + ')'); finally FreeLibrary(MAPIModule); end; end;
//kald var i : integer; str : string; attfiles : string; begin attfiles := ''; begin for i := 0 to Dbrichedit1.Lines.Count do str:= str + #13#10+(Dbrichedit1.Lines[i]); end;
Hej Stone Nu har jeg prøvet din kode ordret, og jeg får stadig fejlen. Kunne du evt ovartales til at prøve www.gej.dk/erikv/project1.zip. Jeg får stadig fejlen, som består i at når mailen er create'd i Outlook (ikke express!), og man vælger properties i TO-feltet, er Email-type udfyldt med receivername (uppercase)
min version er d5 Interprise - d5 pro compiler man dit eksempel kører det fint men hvis man fortryder mailen får man en Mapi fejl(1) koden vi begge bruger tager ikke hensyn til hvis mailen fortrydes...hmmm hmmm det er ikke godt.
den kan godt sende men mailen bliver ikke modtaget.. det der undre mig er at din version ikke virker da vi kører samme outlook og xp, min mail del er en del af et større program, som først zipper en database som backup og så smider den i outlook.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.