Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: HartiMcFly am 07.08.06 - 11:56:56
-
Hallo,
ich habe einen Agenten, der mir "Spam Mails" in einen seperaten Ordner verschiebt. Es läuft soweit alles einwandfrei. Leider bekomme ich von einer Person Mails, die ebenfalls im Spam landen, dieses aber nicht dürfen.
Kann ich in meinem Script irgendwo eine Ausnahme für eine Mail Adresse einbauen. Quasi soll diese Mail Adresse dann nicht von dem Agenten angefast werden.
Ich hoffe ihr könnt mir helfen.
Hier mal mein Code.
Danke Patrick
Sub Initialize
Dim Sitzung As New NotesSession
Dim Inhaltsliste As Variant
Dim Inhalte List As String
Dim mail As NotesDocument
Dim datenbank As NotesDatabase
Set Sitzung = New NotesSession
Set mail = Sitzung.DocumentContext
Set datenbank = Sitzung.CurrentDatabase
If mail.hasitem("X_Spam_Status") Then
Inhaltsliste = Evaluate({@explode(@ReplaceSubstring("}&mail.X_Spam_Status(0) & {"; " "; " ") ;" ")})
Forall param In Inhaltsliste
Inhalte (Strleft(param, "=")) = Strright(param, "=")
End Forall
If Val(Inhalte ("score")) >= 4.8 Then
Call datenbank.EnableFolder("Spam")
Call mail.PutInFolder( "Spam" )
Call mail.RemoveFromFolder("($Inbox)")
End If
End If
End Sub
-
Du setzt an der falschen Stelle an.
Da ist das Kind ja schon in den Brunnen gefallen. Ich würde bei der Spam Erkennungs SW nachschauen, warum die den Score für diese Person auf über 4.8 setzt.
Grundsätzlich kannst du natürlich noch eine Klammer außenrum machen und
if mail.From(0) <> "Benutzername"
mit einbauen aber das wird je mehr Ausnahmen du machen willst um so aufwändiger. Wenn schon dann solltest du dir da eine Liste mit einbauen und auf ist nicht in Liste enthalten abfragen. Dann kann man das wenigstens erweitern.
-
Hallo Thomas,
kannst du mir dass bitte einmal mit beispiel@test.de in meinen Code ein bauen?
Ich sehe zur Zeit den Wald vor lauter Bäumen nicht mehr.
Danke Patrick
-
Sei mir nicht böse aber das müsstest du eigentlich alleine hinbringen.
Schließlich hast du den Befehl ja schon und musst ihn nur noch an der richtigen Stelle einbauen. Und die sollte mit etwas logischer Überlegung ganz einfach zu finden sein.
-
Hallo Thomas,
ich habe es jetzt folgendermaßen eingebaut, leider zeigt es so keine Wirkung. Kannst du nocheinmal drüber schauen?
Danke Patrick
Sub Initialize
Dim Sitzung As New NotesSession
Dim Inhaltsliste As Variant
Dim Inhalte List As String
Dim mail As NotesDocument
Dim datenbank As NotesDatabase
Set Sitzung = New NotesSession
Set mail = Sitzung.DocumentContext
Set datenbank = Sitzung.CurrentDatabase
If mail.from(0) <> "Beispiel@test.com" Then
If mail.hasitem("X_Spam_Status") Then
Inhaltsliste = Evaluate({@explode(@ReplaceSubstring("}&mail.X_Spam_Status(0) & {"; " "; " ") ;" ")})
Forall param In Inhaltsliste
Inhalte (Strleft(param, "=")) = Strright(param, "=")
End Forall
If Val(Inhalte ("score")) >= 4.8 Then
Call datenbank.EnableFolder("Spam")
Call mail.PutInFolder( "Spam" )
Call mail.RemoveFromFolder("($Inbox)")
End If
End If
End If
End Sub
-
Schau dir mail mit dem Eigenschafts Fenster die Adten die im From Feld der Mail stehen genauer an. Die Prüfung gegen <> prüft nur ob exakt dieser Wert drinsteht.
Mittlerweile steht meistens aber noch irgendwas anderes drin wie zum Beispiel:
Thisismyname <myname@irgendwo.de>
-
Also muß es quasi so aussehen?
If mail.from(0) <> "thisismyname <Beispiel@test.com>" Then
so Richtig??
Danke Patrick
-
Nein - Du musst nach einem Teilstring suchen:
If Instr (docMail.From (0), "beispiel@test.com") > 0 then ....
Bernhard
-
Danke Patrick
-
Nachdem ich die Suche nach einem Teilstring eingebaut habe, sieht es so aus.
Sub Initialize
Dim Sitzung As New NotesSession
Dim Inhaltsliste As Variant
Dim Inhalte List As String
Dim mail As NotesDocument
Dim datenbank As NotesDatabase
Set Sitzung = New NotesSession
Set mail = Sitzung.DocumentContext
Set datenbank = Sitzung.CurrentDatabase
If Instr (docMail.From (0), "Beispiel@Beispiel.de") >0 Then
If mail.hasitem("X_Spam_Status") Then
Inhaltsliste = Evaluate({@explode(@ReplaceSubstring("}&mail.X_Spam_Status(0) & {"; " "; " ") ;" ")})
Forall param In Inhaltsliste
Inhalte (Strleft(param, "=")) = Strright(param, "=")
End Forall
If Val(Inhalte ("score")) >= 4.8 Then
Call datenbank.EnableFolder("Spam")
Call mail.PutInFolder( "Spam" )
Call mail.RemoveFromFolder("($Inbox)")
End If
End If
End If
End Sub
Nun Filtert er gar nichts mehr heraus, heißt also die Spam Mails landen wieder ganz normal im Eingang.
Könnt ihr bitte nochmals drüber schauen?
Danke
-
Jetzt werden ja auch nur noch die Mails von "Beispiel@beispiel.com" in die Prüfung einbezogen ...
-
Hallo,
es ist doch aber genau der Befehl, den du mir 2 Antworten weiter oben genannt hast, oder bin ich jetzt ganz blind?
Kannst du mir bitte sagen wie es richtig lauten müßte?
Wäre echt nett. Danke
-
kannst du mir dass bitte einmal mit beispiel@test.de in meinen Code ein bauen?
Bernhard hat nur gemacht, was DU gewollt hast...
-
Die Instr-Funktion ist in der DesignerHelp ausreichend dokumentiert. Und mit der Logik musst Du wirklich allein klar kommen, sonst hat das keinen Zweck.
Bernhard
-
Ich finde den Fehler nicht wirklich, kannst du mir noch etwas mehr auf die Sprünge helfen??
Ich weiß, ich bin schon nervig
Patrick
-
Ich habe den Thread nur kurz überflogen, aber wenn ich dich richtig verstehe, willst du eine bestimmte Adresse von der "Spam-Bearbeitung" ausschließen.
Dann müsste das so aussehen:
If Instr (docMail.From (0), "Beispiel@Beispiel.de") = 0 Then
'Hier wird weiter geprüft.
End If
Axel
-
Condition Return value
string1 is the empty string ("") 0
Müsste doch > 0 heissen....
-
Nein. Ist die Mailadresse enthalten, wird dann ja in den nachfolgenden Zweig geleitet, und ist sie nicht enthalten, wird überhaupt nichts weiter gemacht.
Bernhard
-
Nein Klaus das ist falsch. Dieser Befehl liefert 0 als Wert zurück, bzw den Begin Wert wenn string2 leer ist. Was bei NULL Werten passiert ist in diesem Fall ein besonderes Kapitel.
Aber insgesamt ist das wieder so ein Fall von Herr vergib ihnen denn sie wissen nicht was sie tun.
Und ein klassisches Beispiel dafür, das es eben nichts nützt jemanden mit Code zu versorgen wenn grundlegende Mechanismen der Programmierung nicht verstanden worden sind.
Patrick, natürlich filtert er jetzt gar nichts mehr. Schließlich hast du ihm gesagt, das er nur noch dann auf den Filter überpüfen soll, wenn er deinen String in docMail.From findet. > 0 bedeutet, das es einen String gibt. Wie Axel schon gesagt hat muss man gegen = 0 prüfen, um das in der Form wie du es vorhast zu machen. Allerdings ist das etwas wo du mit lesen der Online Hilfe und einem Minimum an logischer Überlegung von selber hättest draufkommen können (müssen).
-
Trotzdem allerbesten Dank für Eure Hilfe.
Gibt es vernünftige Internetseite wo man sich in Lotus Script einlesen kann?
Oder etwa Tutorials?
Danke Patrick
-
Eine Internetseite kenne ich nicht. Aber was mir spontan einfällt wäre z.B. das hier:
Lotus Notes Domino R5 für Windows - LotusScript
(http://www.herdt4you.de/commerceportal/item_detail.asp?ItemNo=1000294)
Domino Designer R5 (http://www.cul.de/domino5.html)
Axel
-
Ich habe es jetzt folgendermaßen drin stehen.
If Instr (docMail.From (0), "Beispiel@Beispiel.de") = 0 Then
durch diese Formel, wird aber meine eigentliche Abfrage umgangen.
Die Spam Mails, die normalerweise in dem Ordner Spam verschoben worden wären, landen jetzt wieder ganz normal im Eingang. Obwohl ich nun das Gleichheitszeichen benutze.
Ihrgendwie will dass nicht so ganz wie ich dass gerne hätte :-(
-
Schalt den Debugger an und schau dir diese Zeile und alle verwendeten Parameter unter dem Mikroskop an. Wenn er da nicht mehr reingeht bedeutet das er findet immer einen Wert für Instr.
-
Morgen zusammen,
ich hatte jetzt länger keine Zeit mehr mich um dieses Problem zu kümmern.
Trotzdem hätte ich noch eine Frage dazu.
Ich habe dieses Lotus Script ja in einem Agenten stehen.
Kann es sein, dass die Filterung nicht durchgeführt wird, weil die Einstellung " Vor Eingang neuer Mail" gesetzt ist?
Kann Notes mit dieser Einstellung überhaupt schon auf die passenden Felder zugreifen?
Ich habe auch schon versucht es zu ändern auf "Nach Eingang neuer Mail" aber dann läuft leider gar nichts mehr ( auch ohne die Filterung ). Muß ich an meinem Code etwas ändern bei dem Wechsel dieser Einstellung?
Danke Patrick
-
Hallo nochmal....
Ich habe es selber gelöst, mußte einfach vorher mit If mail.HasItem nachschauen ob das From, bzw. dass SMTPOriginator in der Mail vorhanden ist.
Trotzdem Danke
Patrick