Hallo,
ich verwende folgenden Code unter Delphi 5 Pro um E-Mails zu verschicken.
Klappt normalerweise auch richtig klasse.
Nur auf einem recht langsamen PC schafft der Rechner es nicht den E-Mail-Client zu öffnen
um die Mail zu verschicken befor die SendMail-Funktion in timeout läuft.
In einem von 10 Fällen "friert" meine Anwendung auch beim verschicken der Mail ein.
Hier der Code:
Delphi-Quellcode:
function SendFileMail(const FileName: TStrArray; const Subject, BodyText, RecipAdress, CopyConAdress: string): string;
var
mMessage : TMapiMessage;
mlpFiles : array of TMapiFileDesc;
mRecips : array of TMapiRecipDesc;
ix : integer;
begin
SetLength(mRecips, 2);
with mRecips[0] do
begin
ulRecipClass := MAPI_TO;
lpszName := PChar(RecipAdress);
lpszAddress := PChar(RecipAdress);
ulEIDSize := 0;
lpEntryID := nil;
end;
with mRecips[1] do
begin
ulRecipClass := MAPI_CC;
lpszName := PChar(CopyConAdress);
lpszAddress := PChar(CopyConAdress);
ulEIDSize := 0;
lpEntryID := nil;
end;
SetLength(mlpFiles, Length(FileName));
for ix := 0 to High(mlpFiles) do
begin
with mlpFiles[ix] do
begin
flFlags := 0;
nPosition := Cardinal(-1);
// nPosition := 0;
lpszPathName := PChar(FileName[ix]);
lpszFileName := nil;
lpFileType := nil;
end;
end;
with mMessage do
begin
lpszSubject := PChar(Subject);
lpszNoteText := PChar(BodyText);
lpszMessageType := nil;
lpszDateReceived := nil;
lpszConversationID := nil;
flFlags := 0;
lpOriginator := nil;
nRecipCount := 2;
lpRecips := @mRecips[0];
nFileCount := Length(FileName);
if (nFileCount > 0)
then lpFiles := @mlpFiles[0]
else lpFiles := nil;
// nFileCount := 1;
// lpFiles := @mlpFiles;
end;
case MapiSendMail(0, 0, mMessage, MAPI_LOGON_UI or MAPI_NEW_SESSION, 0) of
MAPI_E_AMBIGUOUS_RECIPIENT:
Result := 'A recipient matched more than one of the recipient descriptor structures and MAPI_DIALOG was not set!';
MAPI_E_ATTACHMENT_NOT_FOUND:
Result := 'The specified attachment was not found!';
MAPI_E_ATTACHMENT_OPEN_FAILURE:
Result := 'The specified attachment could not be open!';
MAPI_E_BAD_RECIPTYPE:
Result := 'The type of a recipient was not MAPI_TO, MAPI_CC, or MAPI_BCC!';
MAPI_E_FAILURE:
Result := 'One or more unspecified errors occurred!';
MAPI_E_INSUFFICIENT_MEMORY:
Result := 'There was insufficient memory to proceed!';
MAPI_E_LOGIN_FAILURE:
Result := 'There was no default logon, and the user failed to log on successfully when the logon dialog box was displayed!';
MAPI_E_TEXT_TOO_LARGE:
Result := 'The text in the message was too large to sent!';
MAPI_E_TOO_MANY_FILES:
Result := 'There were too many file attachments!';
MAPI_E_TOO_MANY_RECIPIENTS:
Result := 'There were too many recipients!';
MAPI_E_UNKNOWN_RECIPIENT:
Result := 'A recipient did not appear in the address list!';
MAPI_E_USER_ABORT:
Result := 'The user canceled one of the dialog boxes!';
end;
end;
Hat jemand eine Idee für mich wie ich die Timeout-Zeit für die SendMail-Funktion setzen kann
oder wie ich mein "einfrieren" behebe?
Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...