MAPI error w delphi7

0

witam serdecznei. potrzebowalem sobie zobaczyc jak sie wysyla maila z zalacznikiem no i mam kod chociazby na stronie:

http://www.swissdelphicenter.ch/en/showcode.php?id=1246

zreszta wkleje bo to krotkie:

---cut here---
uses
Mapi;

function SendEMail(Handle: THandle; Mail: TStrings): Cardinal;
type
TAttachAccessArray = array [0..0] of TMapiFileDesc;
PAttachAccessArray = ^TAttachAccessArray;
var
MapiMessage: TMapiMessage;
Receip: TMapiRecipDesc;
Attachments: PAttachAccessArray;
AttachCount: Integer;
i1: integer;
FileName: string;
dwRet: Cardinal;
MAPI_Session: Cardinal;
WndList: Pointer;
begin
dwRet := MapiLogon(Handle,
PChar(''),
PChar(''),
MAPI_LOGON_UI or MAPI_NEW_SESSION,
0, @MAPI_Session);

if (dwRet <> SUCCESS_SUCCESS) then
begin
MessageBox(Handle,
PChar('Error while trying to send email'),
PChar('Error'),
MB_ICONERROR or MB_OK);
end
else
begin
FillChar(MapiMessage, SizeOf(MapiMessage), #0);
Attachments := nil;
FillChar(Receip, SizeOf(Receip), #0);

if Mail.Values['to'] <> '' then 
begin 
  Receip.ulReserved := 0; 
  Receip.ulRecipClass := MAPI_TO; 
  Receip.lpszName := StrNew(PChar(Mail.Values['to'])); 
  Receip.lpszAddress := StrNew(PChar('SMTP:' + Mail.Values['to'])); 
  Receip.ulEIDSize := 0; 
  MapiMessage.nRecipCount := 1; 
  MapiMessage.lpRecips := @Receip; 
end; 

AttachCount := 0; 

for i1 := 0 to MaxInt do 
begin 
  if Mail.Values['attachment' + IntToStr(i1)] = '' then 
    break; 
  Inc(AttachCount); 
end; 

if AttachCount > 0 then 
begin 
  GetMem(Attachments, SizeOf(TMapiFileDesc) * AttachCount); 

  for i1 := 0 to AttachCount - 1 do 
  begin 
    FileName := Mail.Values['attachment' + IntToStr(i1)]; 
    Attachments[i1].ulReserved := 0; 
    Attachments[i1].flFlags := 0; 
    Attachments[i1].nPosition := ULONG($FFFFFFFF); 
    Attachments[i1].lpszPathName := StrNew(PChar(FileName)); 
    Attachments[i1].lpszFileName := 
      StrNew(PChar(ExtractFileName(FileName))); 
    Attachments[i1].lpFileType := nil; 
  end; 
  MapiMessage.nFileCount := AttachCount; 
  MapiMessage.lpFiles := @Attachments^; 
end; 

if Mail.Values['subject'] <> '' then 
  MapiMessage.lpszSubject := StrNew(PChar(Mail.Values['subject'])); 
if Mail.Values['body'] <> '' then 
  MapiMessage.lpszNoteText := StrNew(PChar(Mail.Values['body'])); 

WndList := DisableTaskWindows(0); 
try 
Result := MapiSendMail(MAPI_Session, Handle, 
  MapiMessage, MAPI_DIALOG, 0); 
finally 
  EnableTaskWindows( WndList ); 
end; 

for i1 := 0 to AttachCount - 1 do 
begin 
  StrDispose(Attachments[i1].lpszPathName); 
  StrDispose(Attachments[i1].lpszFileName); 
end; 

if Assigned(MapiMessage.lpszSubject) then 
  StrDispose(MapiMessage.lpszSubject); 
if Assigned(MapiMessage.lpszNoteText) then 
  StrDispose(MapiMessage.lpszNoteText); 
if Assigned(Receip.lpszAddress) then 
  StrDispose(Receip.lpszAddress); 
if Assigned(Receip.lpszName) then 
  StrDispose(Receip.lpszName); 
MapiLogOff(MAPI_Session, Handle, 0, 0); 

end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
mail: TStringList;
begin
mail := TStringList.Create;
try
mail.values['to'] := '[email protected]';
mail.values['subject'] := 'Hello';
mail.values['body'] := 'blah';
mail.values['body'] := 'blah';
mail.values['attachment0'] := 'C:\Test.txt';
// mail.values['attachment1']:='C:\Test2.txt';
sendEMail(Application.Handle, mail);
finally
mail.Free;
end;
end;

---cut here---
no i po wykonaniu programu dostaje errora ktory jak zajrzalem do kodu pokazuje sie gdy nie mozna zainicjowac MAPI. i pytanie: czy jest cos skopane z moim delphi ?? bo podejrzewam ze kod jest poprawny, moze musze go troche zmodyfikowac, gdzies cos wpisac albo co.. nie wiem, bardzo bylbym wdzieczny za pomoc

pozdrawiam - toudi

0

Masz rację. Kod jest poprawny i na delphi 7 uruchamia się bez problemu (zakładając, że do uses dopisałeś MAPI).
Ja dołożę swoje pytanie. Wykonując ten kod uruchamia Outlook Express z wypisanym tematem, treścią i z załącznikiem. Ale co dopisać żeby się automatycznie wysłał, żeby go nie trzeba było popychać ręcznie?

Piotr

0

Właśnie odpowiedziałem sobie na moje pytanie. W celu wysłanie bez potwierdzania wystarczy zastąpić MAPI_DIALOG wartością 0.
Następne pytanie. Wysyłając ręcznie przez Outlooka Express pocztę podpisuje cyfrowo i szyfruję. Jak tego dokonać stosując MAPI (w przykładzie powyżej wysyła, ale jako tekst jawny i bez podpisu)?.

1 użytkowników online, w tym zalogowanych: 0, gości: 1