Kein Zugriffsrecht auf ServerTempFileName bei Email Versand

26. August 2020 11:22

Guten morgen,

beim Versuch, aus einer Gebuchten Rechnung heraus, eine E-Mail zu versenden wird dies quittiert mit:

Die Datei "C:\ProgramData\Microsoft\Microsoft Dynamics NAV\100\Server\MicrosoftDynamicsNavServer$INSTANCE\users\default\XXX\USER\TEMP\__TEMP__9b59781a62854ca49b2db283cf3522de.tmp.pdf" wurde nicht gefunden.

Nav läuft in einer Citrix Umgebung. 3Tier, Vermute dass der Client keine Kenntnis hat wo das Temp File liegt, oder keine Zugriffsrechte.

Kann man den Temp Pfad, wo das File erstellt wird, ändern?

Vielen Dank

Re: Kein Zugriffsrecht auf ServerTempFileName bei Email Vers

29. August 2020 07:17

Hallo,

den Pfad muss man eigentlich nicht ändern. Es kommt immer darauf an, was du mit der Datei vorhast, und wie Sie erzeugt wird.

Dreh- und Angelpunkt ist dabei meist die Codeunit "File Management" und/oder die Standard Mail Codeunits 397 Mail und 400 SMTP-Mail.

Willst du die Mail mit SMTP verschicken, kann das der Server machen, der sollte die Temp-Datei öffnen können. Willst du das ganze mit dem lokalen Outlook versenden, musst du die Datei zunächst auf den Client downloaden. Da hilft dir das File Management weiter.

Erzeugst du die PDF selbst, dann kannst du die Datei auf jeden Pfad speichern, auf den der Benutzer Zugriff hat, mit dem der Servicetier ausgeführt wird (im Netzwerk UNC-Pfade). Hier sollte dann ein Domain- Benutzer mit entsprechenden Rechten zum Einsatz kommen, und nicht der System- Benutzer.

Gruß Fiddi

Re: Kein Zugriffsrecht auf ServerTempFileName bei Email Vers

29. August 2020 11:53

Hallo fiddi,

danke für die Antwort.

Das erzeugte PDF soll per E-Mail versendet werden. Wenn ich aus Gebuchte Rechnungen heraus die Standard Funktion per E-Mail versenden verwende, geht (sofern eingerichtet) der E-Mail Dialog auf (Page 9700) ,
an diesem Dialog wird schon die erstellte Datei nicht angehängt, weil kein Zugriff. Dort in der Page kann man ja noch ankreuzen ob das öffnen mit Outlook gewünscht ist, die Abfrage ob Outlook zur Verfügung steht passiert ja dann in CU9520 Mail Management.

Am schönsten wäre wenn Outlook aufgeht und die Datei dort dran gehängt wird.
Willst du das ganze mit dem lokalen Outlook versenden, musst du die Datei zunächst auf den Client downloaden. Da hilft dir das File Management weiter.


Ist dies kein Standard? Ich dachte das würde schon passieren, automatisch, dass die Datei auf den Client geladen wird, wenn man öffnen mit Outlook ankreuzt, aber wie oben geschrieben, zu dem Punkt kommt es erst gar nicht (weil Attachment schon nicht im Email Dialog angehängt wird).

Versand via Smtp geht leider nicht, da Ports gesperrt sind, Versand müsste über Exchange Webservice passieren.


Mein "Workaround" sieht derzeit so aus, in CU419 File Management die Function ServerTempFileName()
Code:
IF locuserMailSetup.GET(USERID) THEN;
IF locuserMailSetup."Path for Temp Files"<>'' THEN BEGIN
  FileName := CreateFileNameWithExtension(locuserMailSetup."Path for Temp Files"+FORMAT(CREATEGUID),FileExtension);
  IF TempFile.CREATE(FileName) THEN BEGIN   
    TempFile.CLOSE;
  END;
END ELSE BEGIN
  TempFile.CREATETEMPFILE;
  FileName := CreateFileNameWithExtension(TempFile.NAME,FileExtension);
  TempFile.CLOSE;
END;



Erstellt die Temporäre Datei in einem pfad welcher dem Benutzer hinterlegt wurde.

Hierbei frage ich mich ob ich durch diesen Workaorund Probleme an anderer Stelle bekommen kann wo evtl gezielt auf das den "Standard" Pfad abgefragt wird.

Beim E-Mail Versand klinke ich mich ein in CU 9520 SendViaSMtp()
Code:
IF locUserMailSetup.GET(USERID) THEN;
IF locUserMailSetup.Mailtype = locUserMailSetup.Mailtype::Exchange THEN BEGIN
    WITH TempEmailItem DO BEGIN
      FileTxt := "Attachment File Path";
      WHILE STRPOS(FileTxt,'\') <>0 DO
        FileTxt := COPYSTR(FileTxt,1+STRPOS(FileTxt,'\'));
     
      varOldFile := "Attachment File Path";
      varNewFile := locUserMailSetup."Path for Temp Files"+"Attachment Name";
     
      IF FILE.RENAME(varOldFile,varNewFile) THEN;
     
      SendMailOverExchangeWebService("Send to", Subject,GetBodyText,varNewFile);
      IF EXISTS(varNewFile) THEN BEGIN 
        TestFile.OPEN(varNewFile); 
        TestFile.CLOSE; 
       ERASE(varNewFile);
      END; 
    END;
    EXIT(TRUE);
END ELSE BEGIN //Smtp Versand


Hier Prüfe ich ebenfalls ob ein Benutzerdefinierter Pfad hinterlegt ist und ob ein Häkchen Exchange angekreuzt ist, in dem Fall soll er über EWS versenden, sonst ganz normal über Smtp.

Da nach dem Prozedere die Temporäre Datei nicht gelöscht wurde, lösche ich diese hier nach dem Umbenennen und dem Versand.


Das ganze müsste ich noch auf der Citrix Umgebung testen mit einem Pfad wo der User auch Zugriff hat.

Meine Sorge bei der Sache ist dass wenn ich in der ServerTempFileName Funktion das TempFile an anderer Stelle ablege, dass evtl. andere Bereiche von NAV nicht auf dieses File zugreifen können weil es C:\ProgramData\Microsoft\Microsoft Dynamics NAV\100\Server\MicrosoftDynamicsNavServer$INSTANCE\users\default\XXX\USER\TEMP\ gesucht wird , es aber nun in c:\temp\ oder woanders liegt. Gibt ja bestimmt einige Funktionen welche auf ServerTempFileName zugreifen.


Falls ich das mit dem Datei Download zum Client falsch verstanden habe, wo müsste ich mich dann einklinken um das File erst zum Client downzuloaden und dann weitergeben?

Vielen Dank

Re: Kein Zugriffsrecht auf ServerTempFileName bei Email Vers

29. August 2020 13:50

Hallo,

Ist dies kein Standard? Ich dachte das würde schon passieren, automatisch, dass die Datei auf den Client geladen wird, wenn man öffnen mit Outlook ankreuzt, aber wie oben geschrieben, zu dem Punkt kommt es erst gar nicht (weil Attachment schon nicht im Email Dialog angehängt wird).


leider nein.

Zum SMTP : Du musst auf deinem Exchange einen SMTP-Connector einrichten (funktioniert auch in der Cloud), der auf einen von dir vergebenen Port SMTP-Mails annimmt (auch verschlüsselt), das ganze muss nur passend konfiguriert werden.

Der Versand über Outlook passiert auch über die Page 9700, da sollte ein kleines Häkchen sein ("In Outlook bearbeiten"). Dieses Häckchen ist auch abhängig von der Konfiguration automatisch gesetzt. Aber nur über den Client.

Wenn in Page 9700 schon kein Anhang gezeigt wird, dann hast du noch ein anderes (Berechtigungs!?)- Problem.

BTW: wolltet ihr nicht schon auf BC sein?

Gruß Fiddi

Re: Kein Zugriffsrecht auf ServerTempFileName bei Email Vers

29. August 2020 14:58

Bevor du noch weitere Änderungen machst: bei der Version vermute ich, hast es schonmal funktioniert. Irgendwas muss sich geändert haben. Selbst wenn nicht, prüf mal die Berechtigungen wie hier beschrieben: https://community.dynamics.com/nav/f/mi ... sue/438721

Re: Kein Zugriffsrecht auf ServerTempFileName bei Email Vers

31. August 2020 11:22

Guten Morgen,

ich konnte nochmal kurz mitgucken...

Popup 9700 EMail Dialog wird geöffnet, und Datei ist dran gehängt.

Habe dann mal Drucken -> als PDF versuchen lassen. Es wird nur angeboten auf einer entfernten Maschine zu speichern, nicht auf den eigenen Lokalen PC.

In der CU400 ist die DotNet Variable Mail auf RunOnClient=Yes.
Der User unter welchem der NAV Dienst ausgeführt wird hat Rechte auf das Temp Verzeichnis(C:\ProgramData\Microsoft\Microsoft Dynamics NAV\100\Server\MicrosoftDynamicsNavServe....USER\TEMP)