Hallo René,
ich habe mir eine Testanwendung gebaut und dann einige Dinge an deiner Funktion SendMail() abgeändert, da ich den Eindruck hatte, dass du sie noch nicht ganz fertige hattest. Sie sieht jetzt bei mir so aus:
Delphi-Quellcode:
function SendMail(const Subject, Body, FileName, SenderName,
SenderEMail: String; Recipients: TStrings): Integer;
var
msg: TMapiMessage;
lpSender: TMapiRecipDesc;
FileAttach: TMapiFileDesc;
recips: array of MapiRecipDesc;
i: integer;
SM: TFNMapiSendMail;
MAPIModule: HModule;
begin
FillChar(msg, SizeOf(msg), 0);
with msg do
begin
lpszSubject := PChar(Subject);
lpszNoteText := PChar(Body);
if (SenderEmail <> '') then
begin
FillChar(lpSender, SizeOf(lpSender), 0);
lpOriginator := @lpSender;
lpSender.ulRecipClass := MAPI_ORIG;
if (SenderName = '')
then lpSender.lpszName := PChar(SenderEMail)
else lpSender.lpszName := PChar(SenderName);
lpSender.lpszAddress := PChar(SenderEmail);
end;
if Recipients.Count > 0 then
begin
SetLength(recips, Recipients.Count);
ZeroMemory(@recips[0], SizeOf(MapiRecipDesc) * Recipients.Count);
for i := Low(recips) to High(recips) do
with recips[i] do
begin
ulRecipClass := MAPI_TO;
lpszName := PChar(Trim(Before(Recipients[i], '<')));
lpszAddress := PChar(Trim(Between(Recipients[i], '<', '>')));
end;
lpRecips := @recips;
end;
if (FileName <> '') then
begin
FillChar(FileAttach, SizeOf(FileAttach), 0);
FileAttach.nPosition := Cardinal($FFFFFFFF);
FileAttach.lpszPathName := PChar(FileName);
nFileCount := 1;
lpFiles := @FileAttach;
end;
end;
MAPIModule := LoadLibrary(PChar(MAPIDLL));
if MAPIModule = 0 then
Result := -1
else
try
@SM := GetProcAddress(MAPIModule, 'MAPISendMail');
if Assigned(@SM)
then Result := SM(0, Application.Handle, msg, MAPI_DIALOG or MAPI_LOGON_UI, 0)
else Result := 1;
finally
FreeLibrary(MAPIModule);
end;
end;
Auf der Maschine, die mir gerade zur Verfügung steht, habe ich nur Mozilla Thunderbird als Simple
MAPI Client drauf. Keine Zugriffsverletzung. Allerdings werden die Recipients nicht übernommen. Ich erhalte aber auch keine Fehlermeldung. Muss da später nochmal nachschauen. Vielleicht ein Sicherheitsmerkmal, damit der Thunderbird nicht wie Outlook als Virenschleuder verwendet werden kann.
Grüße vom marabu