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
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