Autor Thema: Mail aus DB an viele Empfänger senden  (Gelesen 5267 mal)

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Mail aus DB an viele Empfänger senden
« am: 04.02.08 - 14:46:03 »
Hallo Lieblingsforum,

ich bin mit meinem bescheidenen Wissensstand mal wieder in einer Sackgasse und würde mich über eine kleine Hilfestellung freuen:

Ich habe eine Datenbank, in der Vereine mit ihren Daten abgespeichert sind, unter anderem gibts ein Feld "EMail" in der die Email Adresse steht.

Mit einem Button in der Maske mit "@Command([MailComposeMemo]);" usw. kann der Anwender dem entsprechenden Verein ein Mail senden, klappt wunderbar.

Nun würde ich gerne in der Ansicht einen Button erstellen, mit dem ich auch ein Mail generieren kann, aber mit den E-Mail-Adressen aus allen markierten Dokumenten.  D.h., im Grunde soll wie mit dem "@Command([MailComposeMemo]);" ein neues Mail geöffnet werden,  bei dem z.B. 10 E-Mail Adressen gleich als Empfänger drinstehen. Betreff und Inhalt soll dann individuell gestaltet werden.

Geht sowas mit Formelsprache? Ich vermute mal eher nicht, lasse mich aber sehr gerne eines besseren belehren.

Im Script muss ich wohl mit den unprocessed Documents und einer Documentcollection die einzelnen E-Mail Adressen zusammensammeln, aber dann? Was ist das Script-Gegenstück zu "@Command([MailComposeMemo])"?

Vielleicht könntet ihr mir ein paar Stichworte liefern, wo ich mich schlauer machen könnte. Danke.

Thomas
« Letzte Änderung: 05.02.08 - 11:09:11 von iukhdh »
Thomas von der IuK

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Mail aus DB an viele Empfänger senden
« Antwort #1 am: 04.02.08 - 14:51:41 »
ad 2 (Lotusscript):
doc.Form ="Memo"
doc.Sendto = stringArrayEmpfaenger;
...
doc.Send
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Mail aus DB an viele Empfänger senden
« Antwort #2 am: 04.02.08 - 14:53:21 »
... mach es mit LS. Dein Ansatz ist richtig.

Soll Die Mail in deiner Mail-DB als Original wiederauffindbar sein?

Toni
Grüßle Toni :)

Offline HH

  • Senior Mitglied
  • ****
  • Beiträge: 339
  • Geschlecht: Männlich
Re: Mail aus DB an viele Empfänger senden
« Antwort #3 am: 04.02.08 - 14:58:06 »
Im pers. Adressbuch gibt es diese Funktion bereits. Das macht dort der Agent CreateMailMemo.

Hubert

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Mail aus DB an viele Empfänger senden
« Antwort #4 am: 04.02.08 - 15:07:39 »
@m3:
Damit öffnet sich dann ein Mail in meiner Mail-DB, in das ich meinen Text einfüllen kann? Irgendwie kommt mir das doc.send so vor, als ob ich da innerhalb des Scriptes alles schon vorgefertigt übergeben muss, oder seh ich das falsch?

@Toni:
wie meinst du das? Ich möchte halt den Anwendern ermöglichen, dass Sie z.B. eine kurze Info an alle Vereine schreiben können. Wenn das Grundgerüst, also die leere Mail mit Empfängern, in der Mail DB geöffnet ist, liegt es doch an mir, ob ich das sende oder auch speichere, oder verstehe ich dich da falsch?

@Hubert:
Das muss ich mir wohl mal anschauen. Danke.
Thomas von der IuK

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Mail aus DB an viele Empfänger senden
« Antwort #5 am: 04.02.08 - 15:18:22 »
... es stellt sich die Frage, ob du aus einem Adressbuch agierst, und ob der User über ein eigenes Mailkonto verfügt.

Agierst du aus einem privaten Adressbuch, dann kannst du den angesprochenen Agenten verwenden. Bist du aber in einer selbstgestrickten Datenbank, dann musst du einiges implementieren, um den Agenten 1:1 zu verwenden...

Zudem ist es in Notes nicht zwingend, daß man eine Mailbox hat. So wie ich dich verstehe soll ein Dokument in der Mail-DB erstellt werden und dort als Kopie abgelegt werden. Es gibt ja auch die Möglichkeit eine Mail zu generieren, ohne daß davon eine Spur in der eigenen Mail-DB verbleibt - nämlich ein neues Dokument per LS erstellen und im Frontend öffnen. Als Bassis-DB kann man die Mail-DB verwenden, oder in der selbstgestrickten DB eine Maske dafür vorhalten...

Toni
Grüßle Toni :)

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Mail aus DB an viele Empfänger senden
« Antwort #6 am: 04.02.08 - 15:39:04 »
Es handelt sich um eine selbstgestrickte Datenbank. Ich hab mir den genannten Agenten grad mal angeschaut und werde versuchen ihn mir anzupassen.

Es soll, wie du richtig verstanden hast, einfach ein neues Dokument in der Mail DB erstellt werden, eine eigene Maske erscheint mir unnötig.

Ich versuch mal mein Glück und melde mit ggf. wieder.

Danke für die Hinweise
Thomas von der IuK

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Mail aus DB an viele Empfänger senden
« Antwort #7 am: 04.02.08 - 15:43:37 »
OK, sorry. Da hatte ich etwas mißverstanden.

Wenn Du ein SICHTBARES Mail aufmachen willst, hast Du zwei Möglichkeiten
a) über die GUI-KLassen die Mail-DB öffnen und dort im GUI ein neues Mail aufmachen (und die Felder befüllen)

b) Im Backend in der Mail-DB einen Draft erstellen und diesen dann über die GUI-Funktionen öffnen.

Für beides sollte es bereits Beispiel hier geben, aber frag ruhig, wenn was unklar ist.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Mail aus DB an viele Empfänger senden
« Antwort #8 am: 04.02.08 - 16:57:37 »
Bitte um weitere Hilfe...

ich habe mir anhand der Tipps oben mal folgenden Code zusammengestupft:

Zitat
Sub Click(Source As Button)
   Dim ws As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim collection As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim maildb As NotesDatabase
   Dim mailnote As NotesDocument
   Dim x As Integer
   
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   
   'Abfrage ob überhaupt ein Dokument gewählt wurde
   If Not collection Is Nothing Then
      If (collection.Count = 0) Then
         Messagebox "Es wurden keine Dokumente ausgewählt.",0,"Fehler"
         Exit Sub
      End If
   Else
      Exit Sub
   End If
   
   'Hier werden die E-Mail Adressen gesammelt
   Redim SendtoNames(collection.Count-1)
   For x = 1 To collection.Count
      Set doc = Collection.GetNthDocument(x)
      SendtoNames(counter)=doc.Email
      counter=counter+1
   Next
   
   'Hier wird die Mail geöffnet
   Set maildb = New NotesDatabase("","")  '********hier kommt der Fehler
   Set mailnote = New NotesDocument(maildb)
   mailnote.Sendto = SendtoNames
   mailnote.Form ="Memo"
   mailnote.Logo=profile.DefaultLogo(0)
   mailnote.Principal = profile.Owner(0)
   
   Call ws.EditDocument(True,mailnote)
   
   
End Sub

Das mit dem Mail öffnen klappt aber noch nicht so recht, es kommt "Database has not opened yet".
Erstens blick ich nicht so ganz was der Fehler mir sagt, zweitens bin ich auch noch nicht so ganz sicher ob das mit dem Mail öffnen so klappen könnte.

Was meint ihr dazu?
Thomas von der IuK

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Mail aus DB an viele Empfänger senden
« Antwort #9 am: 04.02.08 - 17:00:01 »
Na welche Mail-DB er aufmachen soll, musst Du ihm schon sagen. ;)
Also Server und Dateiname.

HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Mail aus DB an viele Empfänger senden
« Antwort #10 am: 04.02.08 - 17:04:12 »
1. Dim dbMail As New NotesDatabase ("", "")
2. Call dbMail.OpenMail

Bernhard

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Mail aus DB an viele Empfänger senden
« Antwort #11 am: 04.02.08 - 17:06:02 »
Hmm, aber das ist doch je Anwender unterschiedlich ...  ???
Thomas von der IuK

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Mail aus DB an viele Empfänger senden
« Antwort #12 am: 04.02.08 - 17:09:33 »
Zitat
Call notesDatabase.OpenMail
Usage
If the script runs on a workstation, OpenMail finds the current user's mail server and database in the notes.ini (or Notes Preferences) file.
If the script runs on a server, the current user is considered to be the last person who modified the agent (the agent's owner), and OpenMail finds the user's mail server and database in the Domino Directory on the server.

Man lernt doch immer was dazu. Danke Bernhard.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Mail aus DB an viele Empfänger senden
« Antwort #13 am: 04.02.08 - 17:12:23 »
 ;) Ohne Frage. Deswegen bin ich bei AtNotes - mal lese ich was, mal schreibe ich was.

Bernhard

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Mail aus DB an viele Empfänger senden
« Antwort #14 am: 04.02.08 - 17:34:24 »
Leider muss ich jetzt gehen, aber irgendwie klappt das bei mir nicht. Da wird wirklich eine Mail geöffnet in die ich dann handisch noch Text usw. eintragen kann? Bei den Beispielen die ich jetzt auf die Schnelle gefunden habe, wurde immer per Script was eingetragen und die Mail dann automatisch weggesandt ...

Ich schau gegen später nochmals rein, morgen werd ich mich auf jeden Fall mit der Sache weiter befassen müssen .... werd ich doch hinkriegen, oder?

 :)

Ciao
Thomas
Thomas von der IuK

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Mail aus DB an viele Empfänger senden
« Antwort #15 am: 04.02.08 - 17:39:25 »
"Irgendwie klappt das nicht" ist immer eine wenig hilfreiche Nullaussage. Machst Du doch auch sonst nicht ...

Und ja: Natürlich klappt das. Du hast allerdings noch mindestens ein Problem in Deinem Code: Was ist den "profile" (ich weiss zwar, was Du meinst, aber Notes stellt sich hier zu recht stur  ;D   Und Du kannst darauf erstmal ganz locker verzichten.).

Bernhard

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Mail aus DB an viele Empfänger senden
« Antwort #16 am: 04.02.08 - 20:46:37 »
... der Agent lässt sich nicht so ohne weiteres portieren, denn wenn du dir den Code dort anschaust, wirst du sehen, daß er sich Profildokumente zieht, die es im persönlichen Adressbuch und in deiner Mail-DB gibt, bei dir in deiner selbstgestrickten Datenbank aber nicht - daher meine Frage, ob es sich bei deiner Anwendung um ein privates Adressbuch handelt oder eine selbstgestrickte Anwendung. Ich hatte es vermutet, da du von einem Feld "EMail" gesprochen hast - das gibt es so im Adressbuch nicht...

Wie Bernhard schon gezeigt hat, mit Call dbMail.OpenMail kannst du aus einer initialisierten NotesDatanbank deine Mail-DB öffnen. Maßgeblich ist dein Arbeitsumgebungsdokument. Damit bekommst du das Profildokument "CalendarProfile" zu fassen - jetzt mußt dich um das Profildokument der Adress-Datenbank kümmern, daß dir in deiner Anwendung gar nicht so zur Verfügung steht...

Das ist nach meiner persönlichen Meinung mehr Aufwand den Agenten und dessen Library anzupassen, als den Code direkt zu programmieren...

Du warst doch schon auf einem guten Weg. Mit UnprocessedDocuments erhälst du die markierten Dokumente, aus denen du das Feld "EMail" in eine Array übernimmst und es dann in einem neuen Dokument deiner MAilDB ins Feld "SendTo" schreibst...

So auf die schnelle...
Code
' # Initialisierungen
Dim session As New NotesSession
Dim dbThis As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim vSendTo As Variant
Dim ws As New NotesUIWorkspace
Dim dbMail As New NotesDatabase( "" , "" )
Dim docMail As NotesDocument
Dim sDummy( 0 ) As String

Set dbThis = session.CurrentDatabase
'
Call dbMail.OpenMail

If Not dbMail.IsOpen Then 
   ' # Abbruchbedingung, da die Mail-DB nicht geöffnet werden konnte...
   ' # ggf. Medlung im Frontend, warum abgebrochen wird...
   Exit Sub ' oder Exit Function - je nachdem...
End If

Set dc = dbThis.UnprocessedDocument

If dc.Count = 0 Then
   ' # Abbruchbedingung, da keine Dokument markiert waren...
   ' # ggf. Medlung im Frontend, warum abgebrochen wird...
   Exit Sub ' oder Exit Function - je nachdem...
End If

vSendTo = sDummy
Set doc = dc.GetFirstDocument
While not doc Is Nothing
   ' # zusammentragen des Feldes "EMail"  in eine Array-Variable
   vSendTo = ArrayAppend( vSendTo , doc.EMail )
   Set doc = dc.GetNextDocument
Wend
' # Bereinigen des Arrays um leere und doppelte Werte, eventuell in sortierter Reihenfolge
vSendTo = ArraySort( ArrayUnique( FullTrim( vSendTo ) ) )


Set docMail = dbMail.CreateDocument
docMail.Form = "Memo"
docMail.SendTo = vSendTo
' # ... und all die Parameter, die du diesem Dokument geben willst
'...
Call ws.EditDocument( True , docMail ) ' # öffnen der neuen Mail im Frontend...


... und nach all den manuellen Inhalten dann noch den Senden-Button drücken...

 - Zu deinem Code sei noch bemerkt, daß man GetNthDocument() nur dann nimmt, wenn man weiß, daß man genau das 20.000ste Dokument benötigt, ohne die anderen vorher anzuschauen. Je mehr Dokumente du in deiner Collection hälst, um so schlechter die Performance. Bei ein paar Dokumenten fällt das hier nicht besonders ins Gewicht - aber leicht wird daraus eine schlechte Angewohnheit...

- Zur Überprüfung der Collection genügt die Abfrage nach dc.Count = 0, da UnprocessedDocument eine Collection mit Count = 0 zurückgibt, falls keine Dokumente markiert waren...

- beim sammeln der E-Mail-Adressen verwendest du in deiner Schreibweise Arrays, denn du greifst nicht auf den ersten Wert von "EMail" zu, sondern auf das gesamte Feld - das geht so auf jeden Fall schief => type mismatch könnte eine Fehlermeldung an der Stelle sein, da dein Feld vom Typ "Textliste" ist, auch wenn nur ein Wert drin steht. Du erhälst ein mehrdimensionales Array mit Empfängeradressen. Bei meiner Methode spilt es keine Rolle, ob in dem Feld ein oder auch mehrere Adressen enthalten sind. Sollte es eine Rolle spielen, dann musst du eben docMail.EMail(0) verwenden...

- zudem hilft "Option Explicit" um alle Variablen vor deren Benutzung zu deklarieren - das scheint hier zu fehlen

- profile.Owner(0) ist ein Überbleibsel aus dem Agentencode. Gemeint war damit das Profildokument deiner Mail-Datenbank namens "CalendarProfile". Dort steht im Feld "Owner" dein Mailname drin, der hier als Principal verwendet wird. Das Profildokument ist weder deklariert, noch wird es irgendwo initialisiert - zumindest nicht in deinem Codeschnipsel...  ;)

Ansonsten könnte das im Rätselraten eine Rolle gespielt haben... :D

Toni

Grüßle Toni :)

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Re: Mail aus DB an viele Empfänger senden
« Antwort #17 am: 05.02.08 - 11:08:58 »
Hallo Toni,
erstmal vielen Dank für deine Mühe und deine umfangreiche Antwort. (den anderen natürlich auch)

Jetzt hats geklappt und ich denk mal dass ich dank deiner Hinweise auch wieder ein wenig mehr von der Sache verstanden habe.

Es ist halt doch einfach was anderes, wenn man einen Code-Hintergrund auch ein wenig erklärt bekommt, und nicht nur an Beispielen aus der Designer-Hilfe rumprobiert, oder, wie oben, einen Code aus einer anderen DB kopiert und die Hälfte garnicht versteht.

Deshalb mag ich euch alle so   ;D

Viele Grüße und ein dreifach kräftiges "HELAU"

Thomas
Thomas von der IuK

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Mail aus DB an viele Empfänger senden
« Antwort #18 am: 05.02.08 - 13:30:45 »
... narri narrooh und Allaaf  ;D

Toni
Grüßle Toni :)

Offline Aladdin Sane

  • Aktives Mitglied
  • ***
  • Beiträge: 181
  • Geschlecht: Männlich
  • Sowieso...
Re: Mail aus DB an viele Empfänger senden
« Antwort #19 am: 13.02.08 - 19:12:29 »
Hallo zusammen,

Ich habe bei mir eine ähnliche Funktion.

Die Mail ist im Frontend geöffnet und es stehen meinetwegen 10 Empfänger drin.

Nun möchte ich die Mail an die 10 Empfänger senden - aber jeder einzelne soll nicht die 10 Adressen zu
sehen bekommen.

Gibt es da eine Option beim versenden?


danke & Gruß
pASCAL

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz