Button zur Entschlüsselung verschlüsselter Mails

  • Hallo zusammen =)


    Ich habe seit kurzem die Administration von unserem Lotus Notes & Domino übernommen.
    Darunter auch ein programmierter Button, der auf Knopfdruck alle Mails die verschlüsselt sind, entschlüsselt (nur im eigenem Postfach).
    Dieser Button funktioniert nur in einer Schablone und entschlüsselt alle Mails die sich in der Ansicht "Verschlüsselte Mails" befinden.


    Leider gibt es bei uns das Phänomen, dass wir auch gelöschte User in Notes haben und der Button dann eine Fehlermeldung auswirft, wenn der Gegenschlüssel des gelöschten Users nicht mehr vorhanden ist.
    Da ich so ziemlich gar keine Ahnung von der Programmierung habe, wollte ich euch mal Fragen ob ihr eine Idee habt, wie ich dort in den Code eine Abfrage einbauen kann die dann die Auswirkungen hat, dass wenn er auf eine nicht entschlüsselbare Mail trifft, diese einfach überspringen soll und die nächste nehmen soll.


    Ich wäre euch echt super Dankbar wenn ihr mir da ein wenig unter die Arme greifen könnt =)


    Sub Click(Source As Button)
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument
    Dim nextdoc As NotesDocument
    Dim anzahl As Variant

    Set db = s.currentdatabase
    Set view = db.getview("MailsEncrypt")
    anzahl = view.Entrycount
    Set doc = view.getfirstdocument

    While Not doc Is Nothing
    Set nextdoc = view.getnextdocument(doc)
    'The below loop is mandatory to ensure that all $File entries are unecrypted
    Forall i In doc.items
    If i.isencrypted Then
    i.isencrypted=False
    End If
    End Forall
    'Must have at least 1 field encrypted in order to call Encrypt method
    Dim temp As New NotesItem(doc,"tempjunk","temp")
    temp.IsEncrypted=True
    Call doc.encrypt
    Call doc.save(True, False)
    'This portion can now remove the fields relative to encrypting the
    'single token encrypted field.
    Call doc.removeitem("$Seal")
    Call doc.removeitem("$SealData")
    Call doc.removeitem("SecretEncryptionKeys")
    Call doc.removeitem("Encrypt")
    Call doc.removeItem("tempjunk")
    doc.verschluesselt = "1"
    Call doc.save(True, False)
    Set doc = nextdoc
    Wend


    Dim memo As New NotesDocument(db)
    memo.Form = "Memo"
    memo.SendTo = s.UserName
    memo.BlindCopyTo = "Interner Support/intersoft GmbH"
    memo.Subject = "Entschlüsselung " & s.UserName
    memo.Body = anzahl & " Mails wurden entschlüsselt."
    Call memo.Send(False)
    End Sub



    Liebe Grüße :danke:

  • Hi,


    Handelt es sich bei den Mails nur um gesendete oder auch um empfangene Mails?


    Bei gesendten mails waere das Feld "From" bzw. "Principal" interessant.
    Bei empfangenen Mails muesstest Du nachsehen, an wen die Mail alles gesendet wurde.



    Andreas

  • Hallo =)


    Sorry für die späte Antwort.


    Ich hab es jetzt geschafft, das er einfach immer weiter macht.


    Nur leider ist das nächste Problem aufgetreten.
    Der Button Arbeitet ja mit einer erstellten Ansicht die select encrypt = 1 Mails anzeigt.
    Doch leider scheint er nicht alle Mails zu erwischen. Bei manchen Mails ist weiterhin in den Zustellungsoptionen der Haken bei "verschlüsselt" gesetzt und die Ansicht zeigt diese Mail auch nicht an.
    Es sind also immer noch Mails verschlüsselt.


    Ich habe jetzt von einem Kollegen einen anderen Code bekommen, der die kompletten mails durcharbeitet, also ohne die Ansicht arbeitet. Doch leider erkennt dieser Code garkeine verschlüsselten Mails, nichtmal die, die mit dem vorigem Button entschlüsselt werden konnte.


    Also eigentlich brauche ich eine Mischung aus beidem. Er soll alle Mails im gesamten Postfach durchsuchen und sie entschlüsseln, dabei natürlich das gesetzte flag bei den Zustellungsoptionen dann auch erkennen und rausnehmen.


    Habt ihr da noch eine Idee?



    Sub Click(Source As Button)
    Dim session As New notessession
    Dim lokal As New notesdatabase("","")
    Dim vmail As Integer
    Dim nmail As Integer
    Dim mails As notesdocumentcollection
    Dim mail As notesdocument
    Dim alle As notesview
    Dim feld As notesitem
    Dim zaehl As Double
    Dim all As Double
    Dim flag As Integer
    Dim currentlog As noteslog
    Dim s As New NotesSession
    Dim db As NotesDatabase
    On Error Resume Next
    Set lokal = session.currentdatabase
    Set mails = lokal.Alldocuments
    Set mail = mails.getfirstdocument
    all=0
    zahl=0
    flag = False
    While Not Mail Is Nothing
    Forall felder In mail.items
    If felder.name = "$Seal" Then
    Call felder.remove
    flag=True
    zahl=zahl+1
    End If
    End Forall
    If flag = True Then
    flag = False
    mail.verschluesselt ="1"
    Call mail.save(True, True)
    End If
    all=all+1
    Print(Str$(all) & " von " & Str$(mails.count) _
    & " Davon verschlüsselt: " & Str$(zahl))
    Set mail = mails.getnextdocument(mail)
    Wend
    Print #1, Str$(zahl) & " Mails wurden entschlüsselt!"
    Close #1
    Messagebox(Str$(zahl) & " Mails wurden entschlüsselt!")
    vmail = Str$(zahl)
    nmail = Str$(all)
    Dim agent As NotesAgent
    Set agent = s.CurrentAgent
    Set db = s.CurrentDatabase
    Dim memo As New NotesDocument(db)
    memo.Form = "Memo"
    memo.SendTo = "test@test.de"
    memo.Subject = "Entschlüsselung"
    memo.Body = vmail & " Mails von " & nmail & " Mails wurden bei " _
    & s.UserName & " entschlüssel."
    Call memo.Send(False)
    End Sub


    Danke schonmal =)

  • Hi,


    Schon mal den Debugger bemueht um zu testen, ob der Code an der Stelle If felder.Name = "$Seal" auch so reagiert wie es gedacht ist.


    Und noch eine kleine Frage.
    Warum arbeitest Du nicht mit NotesDocument.IsEncrypted um zu pruefen, ob das betreffende Dokument verschluesselt ist.



    Andreas

  • Huhu =)


    Ich hab leider keine Ahnung wie ich den Debugger benutze (oder wo er überhaupt ist :x)
    Da ich keine Übersicht über die Befehle habe, weil ich wie gesagt noch nie damit programmiert habe, weiß ich nicht so 100% welchen Befehl ich für was benutze.
    ich hangel mich nur irgendwie so durch ^^'
    Momentan versuche ich auch wieder mit dem zuerst gepostetn Code den so abzuändern, das er nicht nur die Ansicht der verschlüsselten Mails nimmt, sondern irgenwie das gesamte Postfach abfragt, klappt aber noch nicht so ganz.


    p.s. ich benutze nich den Code Button hier zum einfügen weil er dann alles in eine Zeile haut und nix mehr erkennabr ist :x


    Danke nochmal =)

  • Ich nochmal ^^


    Also irgendwie trau ich mich da jetzt nicht mehr ran :D
    Ich hab mir jetzt was zusammengebastelt, was nach jedem ausführen die Mails im gesendeten Ordner halbiert und dann wohl löscht oder irgendwas, auf jeden Fall sind sie dann weg.
    Lief nicht ganz so wie geplant ^^ Denn eigentlich wollte ich alle Mails aus dem gesendet Ordner entschlüsseln T.T und nicht löschen (Zum Glück hab ich mir vorher eine Kopie von meiner Datenbank gemacht ^^)
    Mit diesen beiden Methoden hatte ich das versucht weil sie in der Hilfedatei zum Designer beschrieben waren.


    Set item = doc.GetFirstItem( "Body" )
    item.IsEncrypted = True
    Call doc.Encrypt
    Call doc.Save( True, True )
    Forall i In doc.Items
    i.IsEncrypted = True
    End Forall
    Call doc.Encrypt
    Call doc.Save( True, True )

  • Huhu =)


    Ich hatte von jemandem die Information, dass die Methode beides macht, also das es nur ein befehl quasi gibt der beides ausführt je nach Situation. War wohl falsch.


    Hast du denn eine Idee für einen Codeabsatz der das macht was ich möchte?

  • Guten Abend,


    wenn ich das hier lese

    Ich habe seit kurzem die Administration von unserem Lotus Notes & Domino übernommen.

    garniert mit dem

    Ich hab leider keine Ahnung wie ich den Debugger benutze (oder wo er überhaupt ist :x)


    Dann verstehe ich manche Verantwortliche nicht.


    M.E. gehört es immer noch zum Rüstzeug eines Admins, dass er auch in der Lage ist, Fehler nachzuprüfen. Und dazu ist der Debugger ein essentielles Werkzeug.


    Zum inhaltlichen:

    • es ist möglich, sowohl alle Dokumente als auch ausgewählte zu entschlüsseln
    • eine funktionierende Fehlerroutine ist immer das erste, was in einen Agenten gehört
    • das Problem bei $Feldern in Script lässt sich durch Voranstellen eines ~ lösen


    CU,
    Axel

  • Hi,


    Axel - @Virus,


    Bei LS bin ich mir nicht sicher, ob ein vorangestelltes ~-Zeichen hilft, wenn ich entweder wie hier geschehen, den Namen des eingestellten Items abfrage (siehe ForAll-Schleife ueber die Items des Dokumentes) bzw. mit NotesDocument.RemoveItem("ItemName") arbeite.


    Bei NotesDocument.~$Seal = "" wuerde ich Dir glaubeich Recht geben.



    Andreas