in diesem Thread
Ahnenblatt Portable und Verzeichnisse
habe ich ja schon erwähnt, dass ich eine Fehlermeldung beim Aufrufen dieser Funktion erhalte und auch weshalb.
Da es nicht viel Arbeit war, habe ich "meine" MAPI32.DLL nun so umgeschrieben, dass diese Funktion funktioniert. Zumindest auf meinen Computern. Nutzen werde ich die Funktion zwar nicht, aber es hat mich einfach interessiert.
Falls es jemand bei sich ausprobieren möchte, gibt es hier die DLL und den Quellcode in Delphi zum Runterladen. Die DLL muss man ins Verzeichnis kopieren, in welchem sich auch die Ahnenblatt.exe oder AhnenblattPortable.exe befindet.
Die Voraussetzungen für ein Senden per E-Mail sind natürlich auch mit dieser DLL gleich: es muss ein Mail-Programm als Standard definiert sein. Für Benutzer, die nur WEB.DE, GMX.DE o.ä. verwenden, geht das natürlich immer noch nicht.
An Programmzeilen zum Senden der E-Mail steckt nicht viel dahinter:
Code: Alles auswählen
function MAPISendDocuments(ulUIParam: Cardinal; lpszDelimChar: LPSTR;
lpszFilePaths: LPSTR; lpszFileNames: LPSTR; ulReserved: Cardinal): Cardinal; stdcall;
const
CR = #13;
var
i: integer;
FileName: string;
begin
Result := MAPI_E_FAILURE;
with TJclEmail.Create do
try
// Es wird der von Ahnenblatt übergebene Dateiname der Ahnenblattdatei
// auf Gültigkeit getestet. Dann wird geprüft, ob ein Standard Mailprogramm
// konfiguriert ist. Wenn ja, wird mit diesem die Datei versendet, ansonsten
// wird das erste gefundene Mailprogramm zum Senden benutzt. Dabei kann
// es aber sein, dass zu diesem Mailprogramm noch kein Konto angelegt wurde.
// Falls jemand zum Beispiel nur "www.Web.de" zum Senden und Empfangen
// von E-Mails verwendet, dann geht das nicht.
FileName := lpszFilePaths;
if not FileExists(FileName) then begin
FileName := ExpandFileName(ExtractFileName(FileName));
end;
if not FileExists(FileName) then begin
Result := MAPI_E_ATTACHMENT_NOT_FOUND;
end else begin
ParentWnd := ulUIParam;
ClientConnectKind := ctDirect;
Subject := 'Ahnenblatt Datei';
Body := 'Anhang: '+CR+ExtractFileName(FileName);
Attachments.Add(FileName);
SaveTaskWindows;
try
{ Installierte Mail-Programme vorhanden? }
if AnyClientInstalled then begin
{ Mail-Programm zum Senden ermitteln }
if SelectedClientIndex = -1 then begin
if ClientCount > 0 then begin
for i := 0 to ClientCount-1 do begin
if Clients[i].Valid then begin
SelectedClientIndex := i;
Break;
end;
end;
end;
end;
{ Mail-Programm gefunden, dann E-Mail senden }
if SelectedClientIndex <> -1 then begin
if Send(True) then
Result := SUCCESS_SUCCESS;
end;
end;
finally
RestoreTaskWindows;
end;
end;
finally
Free;
end;
end;
Bodo