Announcement

Collapse
No announcement yet.

Mailversand per MAPI

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mailversand per MAPI

    Hallo zusammen,
    folgendes Problem unter DELPHI 5.

    Wir müssen bei einem Kunden den Mailversand (zu Outlook) aus unserer Software per MAPI machen.
    Wie bekomme ich es hin, dass die STandardsignatur des Postfachs verwendet wird? Mit OLE war das kein Problem, aber zu MAPI find ich nichts;
    Hier der Code:

    procedure MAPISend (const aRecipient, aSubject, aNote, aFileList, aFileNameList: string; Flags, Session, ParentHandle: Integer);
    var
    ii: integer;
    ReturnCode: Integer;
    Message: TMAPIMessage;
    Recip: TMAPIRecipDesc;
    Files: array[0..127] of TMAPIFileDesc;
    MessageType: string;
    aNoteText, aPath, aFile: string;
    FileCount: integer;
    begin
    //*** Dateien über MAPI verschicken...
    begin
    FileCount := GetFieldCount(aFileList);
    if FileCount > 128 then begin
    MessageDlg('Es können maximal 128 Dateien verschickt werden', mtError, [mbOK], 0);
    end
    else begin
    //*** Empfänger
    Recip.ulReserved := 0;
    Recip.ulRecipClass := MAPI_TO;
    GetMem(Recip.lpszName, Length(aRecipient) + 1);
    StrPCopy(Recip.lpszName, aRecipient);
    Recip.lpszAddress := '';
    Recip.ulEIDSize := 0;
    Recip.lpEntryID := nil;
    //*** Nachrichtentyp...
    MessageType := ReadStationCfg('Mail', 'MessageType', '');
    if (MessageType = '') then
    MessageType := ReadAppCfg('Mail', 'MessageType', '');
    if (MessageType = '') then
    MessageType := 'IPM.Microsoft Mail.Note';
    //*** Nachricht bei Bedarf um x Dummy-Leerstellen für Dateianhänge erweitern...
    if aNote = '' then
    aNoteText := MakeStr(FileCount, #32)
    else
    aNoteText := aNote + #13 + MakeStr(FileCount, #32);
    //*** Nachricht aufbauen...
    Message.ulReserved := 0;
    GetMem(Message.lpszMessageType, Length(MessageType) + 1);
    StrPCopy(Message.lpszMessageType, MessageType);
    GetMem(Message.lpszSubject, Length(aSubject) + 1);
    StrPCopy(Message.lpszSubject, aSubject);
    GetMem(Message.lpszNoteText, Length(aNoteText) + 1);
    StrPCopy(Message.lpszNoteText, aNoteText);
    Message.lpszDateReceived := '';
    Message.lpszConversationID := '';
    Message.flFlags := 0;
    Message.lpOriginator := nil;
    //*** Ist überhaupt ein Empfänger vorhanden?
    if (Trim(aRecipient) = '') then begin
    Message.nRecipCount := 0;
    Message.lpRecips := nil;
    end
    else begin
    Message.nRecipCount := 1;
    Message.lpRecips := @Recip;
    end;
    //*** Dateien anhängen...
    try
    if (FileCount = 0) then begin
    Message.nFileCount := 0;
    Message.lpFiles := nil
    end
    else begin
    Message.nFileCount := FileCount;
    for ii := 0 to FileCount - 1 do begin
    aPath := GetFieldValue(ii + 1, aFileList);
    aFile := GetFieldValue(ii + 1, aFileNameList);
    GetMem(Files[ii].lpszPathName, Length(aPath) + 1);
    GetMem(Files[ii].lpszFileName, Length(aFile) + 1);
    Files[ii].ulReserved := 0;
    Files[ii].flFlags := 0;
    Files[ii].nPosition := StrLen(Message.lpszNoteText) - FileCount + ii;
    StrPCopy(Files[ii].lpszPathName, aPath);
    StrPCopy(Files[ii].lpszFileName, aFile);
    Files[ii].lpFileType := nil;
    end;
    Message.lpFiles := @Files;
    end;
    ReturnCode := MAPISendMail(Session, ParentHandle, Message, Flags, 0);
    case ReturnCode of
    SUCCESS_SUCCESS: begin end;
    MAPI_E_USER_ABORT: begin end;
    else
    raise ECustomError.Create('Fehler beim verschicken einer Nachricht (' + IntToStr(ReturnCode) + ')');
    end;
    finally
    //*** Beölegten Speicher wieder freigeben...
    FreeMem(Recip.lpszName, StrLen(Recip.lpszName) + 1);
    FreeMem(Message.lpszMessageType, StrLen(Message.lpszMessageType) + 1);
    FreeMem(Message.lpszSubject, StrLen(Message.lpszSubject) + 1);
    FreeMem(Message.lpszNoteText, StrLen(Message.lpszNoteText) + 1);
    for ii := 0 to FileCount - 1 do begin
    FreeMem(Files[ii].lpszPathName, StrLen(Files[ii].lpszPathName) + 1);
    FreeMem(Files[ii].lpszFileName, StrLen(Files[ii].lpszFileName) + 1);
    end;
    end;
    end;
    end;
    end;


    Vorab schon mal vielen Dank

    Tina
Working...
X