Seite 1 von 1

Senden per E-Mail Funktion

Verfasst: 19.04.2012, 20:45
von Bodo1961
Hallo,

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;
Gruß
Bodo