Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi MAPI - /Send receive muss manuell getätigt werden/ winmail.dat (https://www.delphipraxis.net/159319-mapi-send-receive-muss-manuell-getaetigt-werden-winmail-dat.html)

Nicodius 23. Mär 2011 09:27


MAPI - /Send receive muss manuell getätigt werden/ winmail.dat
 
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

Nicodius 24. Mär 2011 08:48

AW: MAPI - /Send receive muss manuell getätigt werden/ winmail.dat
 
Irgendwer eine Idee? *push*

sx2008 24. Mär 2011 09:12

AW: MAPI - /Send receive muss manuell getätigt werden/ winmail.dat
 
Das manuelle Bestätigen liegt an deinem Outlook-Client.
Outlook wurde zu oft von Computerwürmer missbraucht, deshalb hat Microsoft jetzt (ähm.. im Jahr 2002 oder so) einen Riegel vorgeschoben.
Man kann die Prüfung abschalten, aber es ist recht umständlich:
http://www.techrepublic.com/article/...pisend/1056016

Die Ursache für die Winmail.dat liegt beim Exchange-Server.
EMails, die nach Aussen gehen (outbound) dürfen nicht im RTFormat gesendet werden.
Irgendwo in den Einstellungen vom Exchange-Server kann man das konfigurieren.

Nicodius 24. Mär 2011 09:24

AW: MAPI - /Send receive muss manuell getätigt werden/ winmail.dat
 
Vielen Dank für die Antwort. Also programmiertechnisch passt alles?

Super. Dann werd ich die Frage zu machen.

Liebe Grüße


Nico


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz