Ich habe aus verschiedenen Quellen a.u. SendMail-function zusammengebastelt und so umgebaut, das man auch Mails mit mehreren Anhängen versenden kann. Nun habe ich folgendes Problem.
Das Array Datei soll dynamisch werden, also habe ich die Deklaration in :
Datei : array of TMapiFileDesc; geändert und zu begin das Array initialisiert mit SetLength(Datei,AttachedFileName.Count+1)
Die funktioniert so weit auch ganz gut, nur wenn ich die Funktion aufrufe passiert
Nichts.
Lass ich SetLength weg und deklariere das Array direkt mit z.b. [0..10] kann ich problemlos bis zu 10 Anhänge dranhängen (halt nur nichtmehr
).
Kann es sein das es an der stelle
lpFiles := @Datei;
zu problemen mit dem dynamischen Array kommt?
Delphi-Quellcode:
function SendMail(Subject, Mailtext,
FromName, FromAdress,
ToName, ToAdress: string;
AttachedFileName: TStrings;
ShowDialog: boolean): integer;
var
MapiMessage: TMapiMessage;
MError: Cardinal;
Empfaenger: array[0..1] of TMapiRecipDesc;
Absender: TMapiRecipDesc;
Datei: array[0..1] of TMapiFileDesc;
i: integer;
begin
with MapiMessage do begin
ulReserved := 0;
// Betreff
lpszSubject := PChar(Subject);
// Body
lpszNoteText := PChar(Mailtext);
lpszMessageType := nil;
lpszDateReceived := nil;
lpszConversationID := nil;
flFlags := 0;
// Absender festlegen
Absender.ulReserved := 0;
Absender.ulRecipClass := MAPI_ORIG;
Absender.lpszName := PChar(FromName);
Absender.lpszAddress := PChar(FromAdress);
Absender.ulEIDSize := 0;
Absender.lpEntryID := nil;
lpOriginator := @Absender;
// Empfänger festlegen (Hier: nur 1 Empfänger)
nRecipCount := 1;
Empfaenger[0].ulReserved := 0;
Empfaenger[0].ulRecipClass := MAPI_TO;
Empfaenger[0].lpszName := PChar(ToName);
Empfaenger[0].lpszAddress := PChar(ToAdress);
Empfaenger[0].ulEIDSize := 0;
Empfaenger[0].lpEntryID := nil;
lpRecips := @Empfaenger;
// Dateien anhängen (Hier: Geändert für mehrer Dateien)
nFileCount := AttachedFileName.Count;
for i := 0 to AttachedFileName.Count - 1 do
begin
// Name der Datei auf der Festplatte
Datei[i].lpszPathName := PChar(AttachedFilename[i]);
// Name, der in der Email angezeigt wird
Datei[i].lpszFileName := nil;
Datei[i].ulReserved := 0;
Datei[i].flFlags := 0;
Datei[i].nPosition := 0;
Datei[i].lpFileType := nil;
end;
lpFiles := @Datei;
end;
if ShowDialog then
MError := MapiSendMail(0, Application.Handle,
MapiMessage, MAPI_DIALOG or MAPI_LOGON_UI, 0)
else
MError := MapiSendMail(0, Application.Handle, MapiMessage, 0, 0);
result := MError;
end;
Gruß
tr909