Outlook - Dateianhänge einfügen und verschlüsselt zippen

Moderator: ModerationP

Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon Soda10 » 24. Sep 2021, 11:36

Hallo Leute,
ist es möglich in Outlook mit einem geführten Dialog Dateianhänge mit 7zip verschlüsselt zu zippen und als Anhang an die E-Mail zu hängen? Oder die in einer E-Mail eingefügten Dateianhänge per Knopfdruck verschlüsselt zu zippen (das wäre noch eleganter) bevor sie versendet wird?
Windows kann ja ZIP-Dateien nicht verschlüsseln.
Ich habe immer wieder das Problem, dass unsere MA E-Mails an externe entweder verschlüsselt senden sollen, bzw wenn das nicht geht weil der externe nicht entschlüsseln kann, die zu schützenden Mailinhalte in eine verschlüsselte ZIP-Datei zu packen. Manche tun sich mit dem Zippen leider sehr schwer. Denkbar wäre auch die ganze E-Mail verschlüsselt zu zippen und dann als Anhang in eine neue Standart-Email einzufügen.
Das Passwort für die Verschlüsselung sollte aus einer Datei bei uns im Netzwerk ausgelesen werden (z.B. x:\pw\StandartPW.txt) oder von unserer Intranetseite ablesbar (z.B. intranet.de\pw.html) sein. Das PW ändert sich turnusmäßig und ist für den Betrieb einheitlich. Eine versehentlich abgelegte verschlüsselte Datei kann somit anhand ihres Zeitstempels später notfalls wieder entschlüsselt werden.

Probleme die ich sehe:
    - Wie kann VBA den Externen Code von 7zip starten?
    - woran erkennt VBA wann 7Zip fertig mit packen ist?
Die Schritte (letztes Beispiel - ganze E-Mail verpacken) wären dann doch:
    1. VBA speichert die aktuelle E-Mail in einem Ordner z. B. "c:\temp"
    2. VBA Zippt die gespeicherte E-Mail mit 7zip und wartet solange bis sie fertig ist. (loop auf einen Ausgabewert von 7zip)
    3. VBA speichert Betreff und E-Mail-Empfänger (inkl. Cc undf BCc) jeweils in einer Variable.
    4. VBA erstellt eine neue E-Mail und fügt den Betreff und die Empfänger ein und schreibt den Standart text "bla bla"
    5. VBA fügt die gezippte Datei als Anhang bei.
soweit die Theorie. Autsch und jetz die Praxis. VBA in Outllok ist für mich ganz neu. Kann nur etwas VBA in Word und Excel. :shock:
Habt ihr dazu Ideen?
Liebe Grüße Dieter
Soda10
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 63
Registriert: 28. Mai 2015, 12:52

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon Fen » 24. Sep 2021, 11:44

Hallo,

im ersten Schritt könnte Powershell die Datei mit Password zippen:

https://blog.danskingdom.com/powershell ... -zip-file/

VBA sollte den Poweshell-Code Starten und dann die Mail erzeugen und abschicken.

mfg
Fen
 

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon knobbi38 » 24. Sep 2021, 12:30

Hallo,

die Lösung von Zen könnte auch problemlos in VBA ohne Powershell umgesetzt werden.

Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3447
Registriert: 02. Jul 2015, 14:23

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon Soda10 » 28. Sep 2021, 15:12

Hallo Ulrich und Fen,
danke für die Hinweise. Das mit Powershell sieht schon mal gut aus. Allerdings würde mich die Abwicklung in VBA interessieren.
Was ich schon hinbekomen habe ist die geöffnete Mail zu speichern, den Anhang (derzeit die msg-Datei als Platzhalter) mit Betreff in die neue Mail einzufügen. Meine weiteren Probleme habe ich im Code mal hinterlegt.
Wie bekomme ich vba dazu die Mail mit PW zu zippen?
hier mein bisheriger Code:

Code: Alles auswählen
Option Explicit
Sub SpeichereMail()
Dim strPath As String
Dim strText As String
Dim strRecipients As String
Dim obj, objInspector, fso As Object
Dim isDir As Boolean
Dim myItem As Outlook.MailItem
Dim myinspector As Outlook.Inspector
Dim olApp As Object
strPath = "C:\temp\test"
isDir = CreateObject("Scripting.FileSystemObject").FolderExists(strPath)
If isDir = True Then
    If Dir(strPath) <> "" Then
        kill strPath & "\*"  'Dateien löschen
        Else
    End If
    Else
    MkDir strPath
End If
If TypeOf Application.ActiveWindow Is Outlook.Explorer Then
    Set obj = Application.ActiveWindow
    Set obj = obj.Selection(1)
    Else
     Set objInspector = ActiveInspector
     objInspector.Activate
        If objInspector.IsWordMail Then
           Set obj = Application.ActiveInspector.CurrentItem
        End If
End If
With obj
    strRecipients = obj.Recipients.Item(1).Address 'Es wird nur der erste Empfänger geholt. -> For Next schleife einfügen aber wie?
    If .Subject = "" Then
        strText = Format(Date, "YYYYMMDD") & "_Mail"
        Else
            strText = Replace(.Subject, "/", "_")
            strText = Replace(strText, ".", "_")
            strText = Replace(strText, "\", "_")
            strText = Replace(strText, ":", "_")
            strText = Replace(strText, "(", "")
            strText = Replace(strText, ")", "")
            strText = Replace(strText, "!", "")
            strText = Replace(strText, "*", "-")
            strText = Replace(strText, ">", "-")
            strText = Replace(strText, "<", "-")
            strText = Replace(strText, "|", "-")
            strText = Replace(strText, """", "")
            strText = IIf(Len(strText) > 100, Left(strText, 100), strText)
    End If
    .SaveAs strPath & "\" & strText & ".msg", olMSG
End With
 
Set myinspector = Application.ActiveInspector
Set myItem = myinspector.CurrentItem
myItem.Close olDiscard
 
'Beginn verpacken und verschlüsseln
'Ende verpacken verschlüsseln

'Beginn Neue Standard-Mail mit verpacktem Inhalt
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
    'Empfanger
    .Recipients.Add strRecipients
    'Betreff
    .Subject = strText
    'Nachricht
    .Body = "Inhalt der E-Mail... bla bla bla" '-> Wie bekomme ich die Standard-Signatur rein?
    'Lesebestätigung aus
    .ReadReceiptRequested = False
    'Anhang - hier muss dann die ZIP-Datei rein!
    .Attachments.Add (strPath & "\" & strText & ".msg")
    .Display
End With
Set olApp = Nothing
'Ende Neue Standard-Mail mit verpacktem Inhalt

'Set fso = CreateObject("Scripting.FileSystemObject") 'Löschen scharf schalten sobald alles funktioniert
'fso.DeleteFolder strPath, True 'Löschen scharf schalten sobald alles funktioniert
MsgBox "Die E-Mail wurde gespeichert"
End Sub

Wäre Super wenn ihr mir weiterhelfen könnt.
Liebe Grüße Dieter
Soda10
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 63
Registriert: 28. Mai 2015, 12:52

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon knobbi38 » 29. Sep 2021, 11:53

Hallo Dieter,

eine passende Kommandozeile als String zusammenzusetzen und diese dann mit Shell oder WshShell.Run() aufzurufen sollte jetzt nicht so schwierig sein. Beispiel dafür gibt es im Internet nun zur genüge. Hier ein Beispiel für Access, geht natürlich auch so in anderen Office Anwendungen:
https://www.devhut.net/2017/04/06/vba-zip-unzip-compress-extract/

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3447
Registriert: 02. Jul 2015, 14:23

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon Soda10 » 29. Sep 2021, 13:18

Hallo Ulrich,
danke für deinen Hinweis.
ich habe das Zippen mal so gelöst:

Code: Alles auswählen
Sub zippen()
'sub für das ausführen einer Batch direkt aus VBA
Dim i As Integer
i = 0
If Dir("c:\temp\test\ende.txt") <> "" Then
    Kill ("c:\temp\test\ende.txt")
End If
If Dir("c:\temp\test\SecurityMail.zip") <> "" Then
    Kill ("c:\temp\test\SecurityMail.zip")
End If
Shell ("cmd /k @echo on && ""C:\Program Files\7-Zip\7z.exe"" a -tzip -pPasswort c:\temp\test\SecurityMail.zip c:\temp\test\*.msg && fsutil file createnew ""c:\temp\test\ende.txt"" ""0"" && exit")
Do Until i > 1
    If Dir("c:\temp\test\ende.txt") <> "" Then
    i = 0
    Else
    i = 1
    End If
Loop
MsgBox "Datei vorhanden" & 1
End Sub


Allerdings tue ich mich mit dem Loop schwer. Der Shell bBefehl funktioniert einwandfrei. die Text-Datei wird nach dem Packen produziert, die shell geschlossen. Nur der Loop anschließend ist endlos. Was mache ich falsch? :?: Die Variablen baue ich ein wenn alles funktioniert.
Gruß Dieter
Soda10
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 63
Registriert: 28. Mai 2015, 12:52

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon mmarkus » 29. Sep 2021, 14:35

Soda10 hat geschrieben:Nur der Loop anschließend ist endlos. Was mache ich falsch? :?:


Du setzt im Code i = 0 oder i = 1 wie soll i also jemals >1 werden?
Da fehlt die Logik.

Die Bedingung im Loop kann doch nie erfüllt werden, deswegen ist er endlos.
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2141
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon Soda10 » 29. Sep 2021, 16:21

Danke das war es
Kleiner Denkfehler das Zeichen > war noch ein Überbleibsel als ich versuchte "i" hochzuzählen. :roll: :idea:
jetzt läuft es. Ich komme beim Loop immer durcheinander, dass der ja durchgeführt wird wenn etwas nicht zutrifft und beim if/then/else wenn es zutrifft dann "then" sonst "else"
Der Code muss so lauten:
Code: Alles auswählen
Do Until i = 1                                        'führe Schleife solange durch bis die nachfolgende Datei vorhanden ist
    If Dir("c:\temp\test\ende.txt") <> "" Then        'wenn die ende.txt vorhanden ist dann mache Wert in "i" auf 1 sonst wieder Anfang schleife
    i = 1
    End If
Loop
Soda10
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 63
Registriert: 28. Mai 2015, 12:52

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon knobbi38 » 29. Sep 2021, 21:59

Hallo Dieter,

a) bin ich kein Freund von der Verwendung von Dir() für die Prüfung, ob eine Datei existiert
b) kannst du den Ausdruck <> "", der ja einen booleschen Wert liefert, auch direkt als Schleifenbedingung nutzen.

Hier mal ein anderen Lösungsansatz mit FileExists():
Code: Alles auswählen
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Function FileExists(ByVal FileName As String) As Boolean
  ' Returns TRUE if the file exists
  On Error Resume Next
  FileExists = Not CBool(GetAttr(FileName) And (vbDirectory Or vbVolume))
  On Error GoTo 0
End Function

---
  Dim strFullname As String
---
  strFullname = "c:\temp\test\ende.txt"

  ' Schleife ausführen, solange die Datei noch nicht vorhanden ist
  Do Until FileExists(strFullname)
    Sleep 200         ' Ausführung an anderen Thread abgeben und 200ms warten
    DoEvents          ' Verarbeitung von Events ermöglichen
  Loop
  ---

Durch die Verwendung von Sleep() wird die Ausführung an andere Threads weitergereicht. Dadurch wird nicht unnötig viel CPU Zeit für das "aktive Warten" verschwendet und mit dem DoEvents ermöglichst du VBA auf andere Ereignisse zu reagieren.

Richtig professionell wäre es jetzt, wenn noch eine Timeout Überwachung eingebaut werden würde, so daß keine Endlosschleife entsteht, wenn die Datei mal nicht angelegt werden kann. Das überlasse ich dann aber deiner Phantasie.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3447
Registriert: 02. Jul 2015, 14:23

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon mmarkus » 30. Sep 2021, 15:30

Hier eine saubere Lösung ohne Schleife, da vba wartet bis 7Zip fertigt ist.


https://danwagner.co/how-to-create-zip- ... ing-7-zip/
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2141
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon Gast » 30. Sep 2021, 16:21

Hallo Ulrich,
herzlichen Dank für deine Hinweise. Habe es umgesetzt und die Schnipsel jetzt zusammengeführt. Soweit funktioniert jetzt alles. Ich habe nur das Problem, dass die Empfänger-Email der Ursprungsmail (Recipients) dann einen Fehler produziert wenn sie leer ist.

Der Code sieht nun wie folgt aus:
Code: Alles auswählen
Public Function FileExists(ByVal FileName As String) As Boolean
  ' Returns TRUE if the file exists
  On Error Resume Next
  FileExists = Not CBool(GetAttr(FileName) And (vbDirectory Or vbVolume))
  On Error GoTo 0
End Function

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'Deklaration der Variable "Sleep" in Millisekunden

Sub SpeichereMail()
Dim strPath, strText As String
Dim strRecipients1, strRecipients2, strRecipients3 As String
Dim obj, objInspector, fso As Object
Dim isDir As Boolean
Dim myItem As Outlook.MailItem
Dim myinspector As Outlook.Inspector
Dim olApp As Object
Dim olMail
Dim Signature As String
Dim strShell As String
Dim i As Integer
Dim Err As Integer
'strPath = "Documents and Settings\" & Environ("UserName") & "\Local Settings\Temp\emailbatch"
strPath = "C:\temp\test\"
isDir = CreateObject("Scripting.FileSystemObject").FolderExists(strPath)
If isDir = True Then
    If Dir(strPath & "*") <> "" Then
        Kill strPath & "*.*"  'Dateien löschen
    End If
    Else
    MkDir strPath
End If
If TypeOf Application.ActiveWindow Is Outlook.Explorer Then
    Set obj = Application.ActiveWindow
    Set obj = obj.Selection(1)
    Else
     Set objInspector = ActiveInspector
     objInspector.Activate
        If objInspector.IsWordMail Then
           Set obj = Application.ActiveInspector.CurrentItem
        End If
End If

With obj.Recipients 'Hier werden die E-Mail-Empfänger aus der vorhandenen E-Mail ausgelesen und einer Variablen zugeführt
    If .Count > 0 Then
        For i = .Count To 1 Step -1
            If .Item(i).Type = 1 Then
                strRecipients1 = .Item(i).Address & ";" & strRecipients1
            ElseIf .Item(i).Type = 2 Then
                strRecipients2 = .Item(i).Address & ";" & strRecipients2
            ElseIf .Item(i).Type = 3 Then
                strRecipients3 = .Item(i).Address & ";" & strRecipients3
            End If
        Next
    Else
    End If
End With
With obj
    If .Subject = "" Then
        strText = Format(Date, "YYYYMMDD") & "_Mail"
    Else
        strText = Replace(.Subject, "/", "_")
        strText = Replace(strText, ".", "_")
        strText = Replace(strText, "\", "_")
        strText = Replace(strText, ":", "_")
        strText = Replace(strText, "(", "")
        strText = Replace(strText, ")", "")
        strText = Replace(strText, "!", "")
        strText = Replace(strText, "*", "-")
        strText = Replace(strText, ">", "-")
        strText = Replace(strText, "<", "-")
        strText = Replace(strText, "|", "-")
        strText = Replace(strText, """", "")
        strText = IIf(Len(strText) > 100, Left(strText, 100), strText)
    End If
    .SaveAs strPath & strText & ".msg", olMSG
End With
Set myinspector = Application.ActiveInspector
Set myItem = myinspector.CurrentItem
myItem.Close olDiscard
 
'Beginn verpacken und verschlüsseln
i = 1
strShell = "cmd /k @echo on && ""C:\Program Files\7-Zip\7z.exe"" a -tzip -pPasswort " & strPath & "SecurityMail.zip " & strPath & "*.msg && fsutil file createnew """ & strPath & "ende.txt"" ""0"" && exit"
If FileExists(strPath & "ende.txt") Then
    Kill (strPath & "ende.txt") 'sicherstellen, dass es auch wirklich keine TXT Datei gibt
End If
If FileExists(strPath & "SecurityMail.zip") Then
    Kill (strPath & "SecurityMail.zip") 'sicherstellen, dass es auch wirklich keine ZIP Datei gibt
End If
Shell (strShell)
Do Until FileExists(strPath & "ende.txt")   ' Schleife ausführen, solange die Datei noch nicht vorhanden ist
    Sleep 200         ' Ausführung an anderen Thread abgeben und 200ms warten
    DoEvents          ' Verarbeitung von Events ermöglichen
    i = i + 1
    If i >= 300 Then
        ExportMailFrm1.Show
        'MsgBox "Fehler beim Zippen! Der warteprozess dauert länger als eine Minute und wurde deshalb abgebrochen. Bitte prüfen Sie ob die Datei ""SecurityMail.zip"" im Verzeichnis " & strPath & "vorhanden ist."
        Err = 1
        Exit Do
    End If
Loop
If Err = 1 Then
Exit Sub
End If
'Ende verpacken verschlüsseln

'Beginn Neue Standard-Mail mit verpacktem Inhalt
Set olApp = CreateObject("Outlook.Application")
Set olMail = olApp.CreateItem(0)
With olMail
    'Empfanger
    .To = strRecipients1
    .CC = strRecipients2
    .BCC = strRecipients3
    '.Recipients.Add strRecipients1
    'Betreff
    .Subject = strText
    'Nachricht - Wie bekomme ich die Standard-Signatur rein?
    .Body = "Sehr geehrte Damen und Herren," & vbNewLine & "anbei erhalten Sie eine verschlüsselte E-Mail als ZIP-Datei verpackt." & vbNewLine & "Das Passwort zum Entschlüsseln müsste Ihnen auf einem anderen Kommunikationsweg zugegangen sein." & vbNewLine & "Sollte Ihnen das Passwort unbekannt sein, setzen Sie sich bitte mit dem Verfasser dieser E-Mail in Verbindung." & vbNewLine & "Mit freundlichen Grüßen" ' hier meine Variablen aus dem AD (wurden davor deklariert  8-) ): & vbNewLine & oName & vbNewLine & "FIRMENNAMETEXT - " & DstSitz & vbNewLine & "Tel.: " & UserTel & vbNewLine & "Fax: " & UserFax
    'Lesebestätigung aus
    .ReadReceiptRequested = False
    'Anhang - hier muss dann die ZIP-Datei rein!
    .Attachments.Add (strPath & "SecurityMail.zip")
    .Display
End With
Set olApp = Nothing
Set olMail = Nothing
'Ende Neue Standard-Mail mit verpacktem Inhalt
Kill (strPath & "*") 'löschen aller Dateien
Set fso = CreateObject("Scripting.FileSystemObject") 'Löschen scharf schalten sobald alles funktioniert
strPath = "c:\temp\test"
fso.DeleteFolder strPath, True 'Löschen scharf schalten sobald alles funktioniert
MsgBox "Hinweis - Die E-Mail liegt nun gezippt dieser Mail bei!"
End Sub

Siehst du noch Verbesserungsbedarf?
Liebe Grüße Dieter
Gast
 

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon Soda10 » 30. Sep 2021, 16:24

Hallo Miteinanderm,
Mist habe jetzt erst bemerkt, dass ich nicht angemeldet war.
Also Vergesst den 3. Satz mit dem Fehler wenn die Mail keine Empfänger hatte. Der war noch bevor ich die Lösung fand. Es geht also jetzt alles.
Ach ja und im Script wird bei der Exit-Do-Anweisung eine Userform "ExportMailFrm1" aufgerufen. Das fand ich wesentlich eleganter, da ich das deutlich besser auf die Fehler (zu große E-Mail) etc. pp verweisen konnte.Wer es also so will bitte die Userform erschaffen, ansonsten auskommentieren und den Nachfolgenden MsgBox Befehl wieder scharf schalten.
Gruß Dieter
Zuletzt geändert von Soda10 am 30. Sep 2021, 16:46, insgesamt 1-mal geändert.
Soda10
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 63
Registriert: 28. Mai 2015, 12:52

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon Soda10 » 30. Sep 2021, 16:35

mmarkus hat geschrieben:Hier eine saubere Lösung ohne Schleife, da vba wartet bis 7Zip fertigt ist.


https://danwagner.co/how-to-create-zip- ... ing-7-zip/

Hallo Markus,
Leider kann ich auf die verwiesene Seite hier im Geschäft nicht zugreifen. Ich probiere das mal bei Gelegenheit privat aus.
Ich habe noch einen anderen Timeout-loop gefunden. Den finde ich auch nicht unelegant.
siehe hier:
Code: Alles auswählen
Sub timeoutloop() 'Alternative zu Sleep
'Timeout mit Datumbezug zum Timeout nach 10 Sekunden
Dim datExitTime As Date
datExitTime = Now + TimeSerial(0, 0, 10)
Do
  If Now > datExitTime Then Exit Do
Loop
End Sub

Allerdings liefert mir die "Sleep" Deklaration von Ulrich gleich auch noch sehr elegant die "Exit do" Möglichkeit
Habe diese Woche wieder viel gelernt.
LG Dieter
Soda10
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 63
Registriert: 28. Mai 2015, 12:52

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon knobbi38 » 30. Sep 2021, 22:04

Hallo Dieter,

sicherlich gibt es noch Möglichkeiten, etwas zu verbessern. Die Frage ist jedoch immer, ob sich das lohnt. Also Kommentare wäre schon mal nicht schlecht, damit auch Außenstehende nachvollziehen können, was eigentlich gemacht wird. So ganz verstehe ich nämlich den Sinn mit der Textdatei noch nicht und nach einiger Zeit wirst du das eventuell auch nicht mehr wisssen.

Zum anderen würde ich tunlichst/niemals eine Codezeile wie
Code: Alles auswählen
Kill (strPath & "*") 'löschen aller Dateien
in meinem Code verwenden. Ist strPath nicht gesetzt, z.B. weil ein Fehler passiert ist, was wird dann ausgeführt? Überlege mal selber, wie gefährlich so etwas werden kann.
Eine andere Sache ist die wiederholte Instanzierung des FSO mit CreateObject("Scripting.FileSystemObject") innerhalb einer Sub. Einmal reicht eigentlich.

Eventuell würde ich mal überlegen, ob wirklich eine Warteschleife notwendig ist, oder ob die Zip Datei auch mit dem WshShell.Run anstatt mit Shell erstellt werden kann, so wie es Markus schon vorgeschlagen hat.

Und btw.:
Solche Dinge wie
Code: Alles auswählen
isDir = CreateObject("Scripting.FileSystemObject").FolderExists(strPath)
If isDir = True Then ...

tun richtig weh. Warum nicht einfach:
Code: Alles auswählen
if fso.FolderExists(strPath) then

wenn man, wie o.a. ein Filescripting-Objekt bereits am Anfang erzeugt hat. Im Übrigen würde ich, wenn ich eh schon mit dem FSO arbeite, auch dessen Methoden verwenden, also fso.DeleteFolder, fso.Createfolder usw. anstatt den VBA Varianten. Einen Mix finde ich hierbei sehr unübersichtlich, aber das ist Geschmackssache bzw. einen Stilfrage.
Man könnte das Beispiel auch abkürzen bzw. vereinfachen und das Verzeichnis immer komplett löschen und neu anlegen, anstatt alle Dateien innerhalb des Verzeichnisses zu löschen. Wenn es nur ein temporäres Arbeitsverzeichnis ist, würde ich auch nicht mir festen Pfaden arbeiten, sondern mir mit der fso.GetTempName Methode einen entsprechenden Namen für mein Tempverzeichnis holen.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3447
Registriert: 02. Jul 2015, 14:23

Re: Outlook - Dateianhänge einfügen und verschlüsselt zippen

Beitragvon Soda10 » 01. Okt 2021, 11:27

Hallo Ulrich,
danke für die Hinweise. Ich habe ja gesagt, dass ich in VBA und outlook noch nicht so firm bin. :lol:
Die unterschiedlichen Behandlungen des "dir" versus "FSO" kommen aus den unterschiedlichen Lösungsansätzen meiner Recherche.
Ich hab das mit FSO umgesetzt soweit ich kam (Habe den Befehl "Set FSO = CreateObject("Scripting.FileSystemObject")" an den Anfang gesetzt.
Allerdings akzeptiert mir FSO nicht den Befehl "FSO.DeleteFolder(strPath)". Ebenso CreateFolder usw. Der Befehl "If FSO.FolderExists(strPath) Then" nimmt er anstandslos!? Was mach ich falsch?
Auch würde ich gerne die Variable "Pword" (neu) mit dem Passwort befüllen, das er sich aus dem Intranet aus eine PHP Datei holt. Diese PHP Datei ist nur mit dem aktuellen Passwort befüllt. Ich bekomme das partout nicht hin.
Soda10
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 63
Registriert: 28. Mai 2015, 12:52

Nächste

Zurück zu Outlook Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste