Newslettersystem gesucht

  • Suche (möglichst auf Freewarebasis ;-)) ein Newslettersystem für Notes, was etwas mehr an Möglichkeiten bietet wie die mitgelieferte Mailinglist-Template.


    Folgende Funktionen sollen möglich sein:


    - An- bzw. Abmelden per Mail
    - Senden eines Newsletters mittels einer Mail an die Newsletter-dB, aber NUR VON BERECHTIGTEN PERSONEN MÖGLICH
    - Automatische Fußnote, in der beschrieben steht, wie man sich ab- und anmelden kann
    - Archivierung der gesendeten Newsletter


    Hat jemand so'n Template 'rumliegen oder weiss, wo man sowas kostenlos bekommt?

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Danke, aber ich bin nicht unbedingt gewillt, 3000 Euro für die offene Gestaltung auszugeben. Es soll ja nur 'ne klitzekleine Newsletter-DB sein, die nur etwas besser als die mit Notes mitgelieferte - kaum brauchbare - Datenbank ist.


    Noch jemand Tipps?

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Sowas lässt sich recht einfach selbst bauen


    *An-/Abmeldung:
    Schicken einer Mail an die DB, mit standartisiertem Subject. Ein Agent läuft los, der die Mail-Adresse in ein Feld im Profil-Dokument packt, bzw. löscht. Dieses Feld wird regelmäßig (stündlich?) mit einer entsprechenden Gruppe im NAB abgeglichen (wg. Zugriff auf DB)


    *Senden eines Newsletter durch berechtigte Personen:
    Beim Eingang neuer Mail läuft ein Agent los, der prüft, ob die Absenderadresse in dem besagten Feld vorhanden ist. Wenn ja, ist gut. Wenn nicht, wird das Doc gelöscht. Kann auch o.g. Agent sein.


    *Fussnote
    Ein einfacher Hinweis in der Form "Memo" (oder wie auch immer du sie nennst), ggf. mit mailto: Link


    *Archivierung
    So, wie jede andere DB auch, die auf der Mail-Schblone basiert

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Danke, RockWilder. Zum Senden eines Newsletters nur durch berechtigte Personen:


    Der Agent, der die Mails bearbeitet, ist soweit fertig, ich bekomme es nur nicht mit meinen eingeschränkten Script-Kenntnissen hin, dass vor dem Senden an alle Mitglieder geprüft wird, ob der Absender berechtigt ist, an alle zu senden.


    Ich habe dazu ein Konfig-Dokument mit einem Feld "key_sendeberechtigt" erstellt. (erreichbar in der Formelsprache mit @DbLookup("":"NoCache";"";"Konfiguration";"Konfiguration";"key_sendeberechtigt")
    In diesem Feld steht eine Liste von Personen, die sendeberechtigt sind.


    Der Agent muss nun also An- und Abmeldevorgänge durchführen, OHNE zu prüfen, ob der Absender sendeberechtigt ist, aber Newsletter an alle vorher auf eben diese Sendeberechtigung prüfen.


    Ich bin mal so frei und habe das Script hier angehängt. Wäre echt super, wenn sich ein Script-Freak das mal ansehen könnte. Ich nehme an, für jemanden, der sich damit auskennt, ist das keine große sache, oder?


    Kann jemand helfen? Wenn die Datenbank dann komplett klappt, werden ich sie bei Bedarf auch gerne kostenlos hier als Download zur Verfügung stellen.

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

    • Offizieller Beitrag

    An das Konfig-Dokument kommst DU im Script mit

    Code
    Set view = Db.GetView("Konfiguration")set doc_konfig = view.GetDocumentByKey("key_sendeberechtigt")


    Danach musst Du noch eine Schleife über die Einträge laufen lassen. Allerdings kannst Du bei dieser Variante nicht mit Gruppen oder Rollen arbeiten.


    In dem Konfig-Dokument würde ich mir ein berechnetes Feld erstellen mit der Formel

    Code
    "#####" + @Implode(key_sendeberechtigt;"#####") + "#####"


    Vorteil, Du kannst mit einem Instr den Inhalt abfragen und benötigst keine Schleife über alle Einträge.

    Code
    If Instr(doc_Konfig.Key_sendeberechtigt(0), "#####" & session.username & "#####")


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Meine Güte, das geht ja fix hier! Besten Dank schonmal!


    Der Hinweis, wie ich per Script ans Konfig-Dok komme, ist schon nicht schlecht.


    Allerdings weiss ich nicht, wie ich sauber die Schleife hinbekomme. Kann mir da mal jemand vielleich mit ein wenig Code helfen?


    Dass ich keine Gruppen oder Rollen abfragen kann, ist kein Problem. In dem Konfig-Dok werden nur eine Handvoll Leute stehen.


    Die Schleife muss doch sicher irgendwo nach der Abarbeitung von Anmelde- bzw. Abmeldeprozedur im Script auftauchen und dann entweder den Sendevorgang anstossen und das Feld Processed auf 1 setzen oder idealerweise den Sendevorgang nicht anstossen und das Feld Processed z.B. auf 2 setzen, damit dann später in einer Statusansicht rausgeschlüsselt werden kann, warum eine Mail nicht gesendet wurde.


    Sowas habe ich mit meinen sehr begrenzten Kenntnissen mal ausprobiert, aber ich habe immer nur endlosschleifen hinbekommen :-(((


    Wäre echt super, wenn mir da jemand (noch mehr) weiterhelfen kann.

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

    • Offizieller Beitrag

    Du brauchst keine Schleife. Die Lösung von taurec ist besser.


    pos = ArrayGetIndex(doc_konfig.Key_sendeberechtigt, session.UserName)
    In pos steht der Index, wenn der Wert gefunden wurde. Ansonsten ist pos NULL.


    Gruß
    Dirk

  • O.K. ich geb's zu: ich bin ein Formelfan und kann mit Script kaum was anfangen.


    Die Antworten sind zwar sicher alle nett gemeint, aber ich weiss nicht, was ich nun wo einbauen muss und wie mein Script dann letztendlich aussehen muss.


    Kann mir nicht jemand helfen, indem er mein oben angehängtes Script entsprechend abändert und den benötigten Code da einbaut und das Script dann wieder hier anhängt?

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

    • Offizieller Beitrag

    normalerweise halte ich nichts davon Code einzusetzen, den ich nicht verstehe. Wie willst Du in dem Code später Fehler suchen? Auch bin ich mir nicht sicher ob ich Deine Beschreibung richtig verstanden habe.


    Aber in etwa so müsste es aussehen, wenn der aktuell angemeldete User die Aktion ausführt:


    Gruß
    Dirk

  • Aah, jetzt merke ich, wo der Denkfehler ist. Der Agent soll natürlich nicht von einem User ausgelöst werden, sondern periodisch mehfach pro Tag nachschauen, ob neue Anmeldungen, Abmeldungen oder zu versendene Newsletter abzuarbeiten sind und dann bei den zu versendenen Newslettern prüfen, ob derjenige, der den Newsletter an diese Datenbank zu Versendung an alle Teinlehmer gemailt hat, überhaupt berechtigt ist, solche Newsletter zu versenden.


    Also darf das Script nicht den Session.UserName benutzen, da ja kein User das Script startet. Es muss aus der jeweiligen Mail dann, wenn im Subject nicht "Anmelden" oder "Abmelden" steht, über das FROM-Feld geprüft werden, ob dort ein Eintrag steht, der mit den im Konfig-Dokument hinterlegten Usern übereinstimmt.


    Also muss wahrscheinlich doch mit einer Schleife gearbeitet werden, oder?

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

    • Offizieller Beitrag

    dann musst Du eine Schleife über alle kommenden Mails machen und anstelle von Session.Username das Feld From aus dem Dokument überprüfen.


    Wie hast Du das An- und Abmelden usw. geregelt?


    Wir setzen da das Produkt "List Server for Domino" (LSD) von Bright Ideas ein.


    Gruß
    Dirk

  • und das mit der Schleife ist ja gerade das Problem. Ich habe da mal ein wenig rumprobiert, aber das führte immer zu Endlosschleifen.


    Die Anmelde- und Abmeldeprozedur kann aus dem weiter oben von mir angehängten Script (agent.txt) ersehen werden. Das Script prüft in regelmäßigen Abständen bei allen seit dem letzten Agentenlauf eingegangenen Mails, ob im Betreff "Anmelden" oder "Abmelden" steht, und fügt die Adresse des Absenders dann entsprechend zu den Abonnenten hinzu oder löscht sie wieder und sendet dann eine entsprechende Bestätigungsmail an den Absender. Steht weder Anmelden noch Abmelden im Betreff, wird die Mail an alle Abonnenten gesendet. Und da ist der Knackpunkt, denn eine Mail an die Abonnenten senden sollen natürlich nur ausgewählte Personen.


    Der Listserver von BrightIdeas ist mir mit 3000$ erheblich zu teuer für den kleinen Newsletter, den ich plane. Ausserdem läuft der (zumindest in der 3.0er Version) nur auf R6, ich habe aber R5 im Einsatz (bis auf weiteres).

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

    • Offizieller Beitrag
    Code
    If Ucase$( (NewMessage.GetItemValue ("Subject")(0)) ) = Ucase$("ANMELDEN") Then
       ' ... (1)
    elseif Ucase$( (NewMessage.GetItemValue ("Subject")(0)) ) = Ucase$("ABMELDEN") Then
       ' ... (2)
    elseif ArrayGetIndex(doc_konfig.Key_sendeberechtigt, session.UserName) <> NULL Then
       ' NewsLetter versenden
       ' ... (3)
    end if


    bei (1) kommt der Code für das Anmelden rein, bei (2) der fürs Abmelden und bei (3) der für den Newsletterversand.


    /*edit*
    Die Schleife über alle Dokumente (Loop) hast Du schon, Du musst nur bei der Bearbeitung unterscheiden.


    Gruß
    Dirk

  • Aah, das bringt mich der Lösung schon sehr nahe, was ich als Laie aber noch nicht verstehe:


    ArrayGetIndex(doc_konfig.Key_sendeberechtigt, session.UserName)


    a) warum muss da session.userName rein? Der Agent soll doch Periodisch laufen, dann ist bei der Ausführung doch gar kein User angemeldet?


    b) woher weiss dieser Befehl, dass doc_konfig sich auf das Konfigurationsdokument mit dem entsprechenden Feld in der Ansicht "Konfiguration" beziehen soll? muss doc_konfig vielleicht vorher noch irgendwie dahingehend definiert werden?


    Fragen über Fragen, aber wir kommen der Sache näher !

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

    • Offizieller Beitrag

    zu 1.)
    Sorry habs kopiert. :hammer: :D


    Muss natürlich so aussehen:

    Code
    ...elseif ArrayGetIndex(doc_konfig.Key_sendeberechtigt, NewMessage.From(0)) <> NULL Then...


    /*edit*
    zu 2.)
    ja. Du brauchst ein Dokument und dieses musst Du noch raussuchen. Dafür könntest Du vor die IF-Anweisung noch den folgendes hinzufügen

    Code
    Set view = MailListFile.GetView("Konfiguration")
    set doc_konfig = view.GetDocumentByKey("key_sendeberechtigt")


    Gruß
    Dirk

  • Ich habe das jetzt mal so eingebaut:


    Ganz oben folgendes:


    Dim view As NotesView
    Dim doc_konfig

    Set MailListFile = Session.CurrentDatabase

    'Liste der Sendebrechtigten aus dem Konfig-Dokument ziehen
    Set view = MailListFile.getview ("Konfiguration")
    Set doc_konfig = view.GetDocumentbyKey ("key_sendeberechtigt")


    dann der Abschnitt, der letztendlich die Prüfung vornehmen soll und die Mail versenden soll oder eben nicht (dann Processed auf "2" setzen):


    Elseif Arraygetindex(doc_konfig.Key_sendeberechtigt,
    NewMessage.From(0)) <> Null Then
    'Newsletter versenden

    If (NewMessage.GetItemValue ("Processed")(0) = "")
    Then
    ' Send the message to the subscribers

    Set Subscribers = MailListFile.GetView ("($Subscriptions)")
    Set Subscription = Subscribers.GetFirstDocument

    'Make sure this document is not processed again

    Set Processed = New NotesItem (NewMessage, "Processed", "1")
    Processed.IsSummary = True


    Call NewMessage.Save (True, False)

    ' Loop through all of the subscriptions sending the message to them
    While Not (Subscription Is Nothing)
    Call SendMail(NewMessage.GetItemValue ("Subject")(0), NewMessage.GetItemValue
    ("BODY")(0) +Chr$(13) + Chr$(10) + Chr$(13) + Chr$(10) +
    "------------------" + "Wenn Sie diesen Newsletter zukünftig nicht mehr
    erhalten möchten, senden Sie eine Mail mit dem Betreff ABMELDEN an ...", Subscription.GetItemValue
    ("Address")(0), MailListFile.Title)
    Set Subscription = Subscribers.GetNextDocument (Subscription)
    Wend

    End If
    Elseif Arraygetindex(doc_konfig.Key_sendeberechtigt,
    NewMessage.From(0)) = Null Then
    'Newsletter nicht versenden, da Absender nicht
    sendeberechtigt, Processed auf 2 setzen zur Kennzeichnung in der Ansicht
    If (NewMessage.GetItemValue ("Processed")(0) = "")
    Then

    'Make sure this document is not processed again

    Set Processed = New NotesItem (NewMessage,
    "Processed", "2")
    Processed.IsSummary = True


    Call NewMessage.Save (True, False)

    End If
    End If



    Bei einem manuell ausgelösten Start auf einer Mail, dessen Absender sendeberechtigt ist (sein sollte), bricht das Script beim ersten Arraygetindex mit "Object Variable not set" ab.


    Ist da jetzt noch irgendwo ein grober Schnitzer drin?

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

    • Offizieller Beitrag

    schalte mal den Debugger (Menü - Datei - Extras - Debug LotusScrit) ein. Lass den Agenten laufen und schau dann im doc_konfig den Inhalt des Items "Key_sendeberechtigt" und in NewMessage den Inhalt des Items "From" an.


    Existieren die Objekte doc_konf und NewMessage?


    Gruß
    Dirk

  • Die Objekte doc_konfig und NewMessage existieren.


    in doc_konfig steht: [NewNotesDocument] und hat KEINE ITEMS!, also taucht "Key_sendeberechtigt" auch nirgendwo auf.


    in NewMessage gibt es den Abschnitt "Items", dort u.a. "From" und dort in "Values" steht der Absendername

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon