Einzelnen Beitrag anzeigen

Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#1

MAPI - /Send receive muss manuell getätigt werden/ winmail.dat

  Alt 23. Mär 2011, 10:27
Hi Leute,

nach langer Zeit habe ich nun wieder Delphi für ein paar kleine Anwendungen in Verwendung und wollte euch fragen ob ihr mir vl ein wenig helfen könnt bei folgendem Problem:

Ich will für unser Ticketsystem ein kleines Tool schreiben welches Computerdaten und Logs sammelt, zippt und dann per email an unser Ticketsystem sendet.

Generell benutze ich für die SendMail Funktion einen Code den ich eh hier oder bei Delphitreff mal gefunden habe aber stehe nun vor folgendem Problem:

Wenn ich auf den Sendeknopf drücke kommt zuerst ein Fenster(ala "ein programm versucht eine mail in ihrem namen zu versenden, überlegen sie ob sie das wirklich wollen) - nach 5 sekunden kann man dann auf allow drücken und es absenden.

Das Problem: wenn ich nicht manuell in Outlook auf "Send/Receive" drücke, wird die mail nicht wirklich ausgeschickt und wenn dann kommt die Mail leider nicht mit dem benötigten Anhang in unser System sondern mit einer Winmail.dat datei(falsche Formatierung).


Delphi-Quellcode:
function SendFileMail(const FileName: TFileName; const Subject, BodyText, RecipName, RecipAdress: String): String;
var
  mMessage: TMapiMessage;
  mlpFiles: TMapiFileDesc;
  mRecips: TMapiRecipDesc;
begin
  if not FileExists(FileName) then
  begin
    Result := 'File "' + FileName + '" not found!';
    Exit;
  end;

  with mRecips do
  begin
    ulRecipClass := MAPI_TO;
    lpszName := PChar(RecipName);
    lpszAddress := StrNew(PChar('SMTP:' + RecipAdress));
    ulEIDSize := 0;
    lpEntryID := nil;
  end;

  with mlpFiles do
  begin
    flFlags := 0;
    nPosition := 0;
    lpszPathName := PChar(FileName);
    lpszFileName := nil;
    lpFileType := nil;
  end;

  with mMessage do
  begin
    lpszSubject := PChar(Subject);
    lpszNoteText := PChar(BodyText);
    lpszMessageType := nil;
    lpszDateReceived := nil;
    lpszConversationID := nil;
    flFlags := 0;your
    lpOriginator := nil;
    nRecipCount := 1;
    lpRecips := @mRecips;
    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;
Delphi-Quellcode:
 S := SendFileMail('C:\test\test.zip', 'Re: [ OTRS#: '+ temp +' ] SupportInfos', 'test',
         'servicedesk@---.at','servicedesk@---.at');

Habt ihr eine Idee ob ich da an dem bestehenden Code was ändern kann damit diese beiden Probleme behoben werden können?

Vielen Lieben Dank


Nico
Nico Müller

Geändert von Nicodius (24. Mär 2011 um 10:25 Uhr)
  Mit Zitat antworten Zitat