Autor Thema: Serienmail(Serienbrief) mit personalisierte-Anhang  (Gelesen 32847 mal)

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #40 am: 01.07.09 - 14:25:13 »
Schon mal mit dem VBA-Debugger durch den Code gegangen?


Andreas

Offline Boulbadaoui

  • Frischling
  • *
  • Beiträge: 41
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #41 am: 01.07.09 - 14:43:10 »
JA
leider kann ich keine Fehler feststellen, außer kommt er nicht bis

Function CreateAttachement(n_docM As NotesDocument, sFileName As String) As Boolean

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #42 am: 01.07.09 - 15:06:12 »
Ist n_docMail vorhanden?
Ist n_dbMail vorhanden und geoeffnet?

Wenn der Code nicht bis CreateAttachement(...) kommt, dann steigt der Code an einer Stelle vorher schon aus oder es sind die entsprechenden notwendigen Kriterien nicht erfuellt.


Andreas

P.S.:
Bitte jetzt nicht falsch verstehen, aber seit wann programmierst Du denn mit VBA?

Offline Boulbadaoui

  • Frischling
  • *
  • Beiträge: 41
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #43 am: 01.07.09 - 15:20:13 »
n_docmail ist corhanden
n_dbMail vorhanden und wird auch geöffnet.



Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #44 am: 01.07.09 - 15:34:21 »
Und durch die With-Anweisung geht er auch ohne weiteres durch?

Wenn ja, dann sollte er auch die angesprochene Funktion aufrufen.


Andreas

Offline Boulbadaoui

  • Frischling
  • *
  • Beiträge: 41
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #45 am: 01.07.09 - 16:25:56 »
ja die with-Anweisung läuft einwandfrei!


Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #46 am: 02.07.09 - 07:36:33 »
Und auch immer mit F8 (Einzelschritt) im Debugger durch den Code gegangen.
Oder setze doch mal einen Haltepunkt beim Aufruf der Funktion.

Anbei noch eine kleine Aenderung des Codes.

Die Zeile zum Senden der Mail muss richtig lauten
Code
Call n_docMail.Send(False)
und nicht wie angegeben
Code
Call n_docMail.Send(Fase)

%EDIT
Den Code habe ich auch nochmal mit folgenden Voraussetzungen versucht:
- Vista Business
- Office 2007
- LN-Client 8.0.2 (1x Client nicht gestartet und 1x Client gestartet)

und er lief problemlos.


Andreas
« Letzte Änderung: 02.07.09 - 08:00:20 von ascabg »

Offline Boulbadaoui

  • Frischling
  • *
  • Beiträge: 41
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #47 am: 02.07.09 - 10:28:42 »
Hallo und Danke,

soll die Call n_docMail.Send funktion erst definiert oder?
im text vermisse ich eine Call n_docMail.Send Funktion!

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #48 am: 02.07.09 - 10:33:43 »
Code
                ' Erstellen des Dateianhanges
                If CreateAttachement(n_docMail, sFile) Then
                    
                    ' Anhang erfolgreich erstellt
                    ' Mail senden
                    Call n_docMail.Send(False)
                    
                End If

Das Call n_docMail.Send(False) ist eine Funktion der Klasse "NotesDocument" und muss nicht definiert werden.
Diese wird im Code nur dann aufgerufen, wenn die "eigene"
Funktion "CreateAttachement(n_docMail, sFile)" den Wert "True" zurueckliefert. (also erfolgreich durchlaufen wurde.


Andreas

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #49 am: 02.07.09 - 10:41:31 »
Zitat
CreateAttachement
Ist das ein Tippfehler, oder ist das korrekt ?
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #50 am: 02.07.09 - 10:46:16 »
@eknore (Ulrich)

Schreibfehler beim Erstellen der eigenen VBA-Routine (also kein Notes),
da ich diesen Code einfach mal nur auf die schnelle runtergeschrieben habe.

Hatte in einem vorherigen Post auch angedeutet.
Zitat
Diesen Code, erhebt keinen Anspruch auf Vollstaendigkeit.


Andreas

Offline Boulbadaoui

  • Frischling
  • *
  • Beiträge: 41
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #51 am: 02.07.09 - 11:08:55 »
Ich glaube es liegt daran, daß kein Attachment erzeugt wird!
hier meine Änderung
___________________________

ist die Schreibweise : StrFile = sh.Range("E" & CStr(intRow)) in excel auf die Spalte E : U:\anhang\name.pdf richtig?

Sub hauptteil()
Dim sh As Worksheet
Dim strName As String 'Empfänger-Name
Dim strAdress As String 'E-Mail Addresse des Empfänger
Dim StrFile As String 'Personalisierten Anhang
Dim StrThema As String 'E-Mail Thema
Dim StrTxt As String 'E-Mail Anhang
Dim intRow As Integer

Set sh = ThisWorkbook.ActiveSheet
If sh Is Nothing Then End
For intRow = 1 To 3 'Schleife über alle Rows
strName = sh.Range("C" & CStr(intRow)) & " " & sh.Range("A" & CStr(intRow))
strAdress = sh.Range("D" & CStr(intRow))
StrFile = sh.Range("E" & CStr(intRow))
StrThema = sh.Range("F" & CStr(intRow))
StrTxt = sh.Range("G" & CStr(intRow))
Call SendMailWithFile(strAdress, strName, StrFile, StrTxt, StrThema)

If Trim(strName) = "" Then Exit For
Next

End Sub
Sub SendMailWithFile(ByVal sAdress As String, ByVal sUser As String, sFile As String, sTxt As String, sThema As String)

   'Sub SendMailWithFile(ByVal sAdress As String, ByVal sUser As String, sFile As String)

    Dim n_ses As New NotesSession
    Dim n_dbNames As NotesDatabase
    Dim n_dbMail As NotesDatabase
    Dim n_docMail As NotesDocument
   
    Dim varMailFile As Variant
   
    ' Notes-Session
    If n_ses Is Nothing Then Exit Sub
    'if 1 und exit
    n_ses.Initialize
   
    ' NAB oeffnen, um den Mailserver und das Mailfile des aktuellen
    ' Benutzers zu ermitteln (von hier wird die Mail gesendet)
    Set n_dbNames = n_ses.GetDatabase("valnotes", "agress.nsf")
'agress.nsf =Absender Datenbank
    If n_dbNames Is Nothing Then Exit Sub
    'if 2 und exit
    If n_dbNames.IsOpen Then
     'if 3
     
        ' gefundene Angaben in Server und Dateiname zerlegen
        varMailFile = Split(GetMailFile(n_ses.UserName, n_dbNames), "~")
        If IsArray(varMailFile) Then
        'if 4
            If LCase(Right(Trim(varMailFile(1)), 4)) <> ".nsf" Then
                varMailFile(1) = Trim(varMailFile(1)) & ".nsf"
            ' if 5
            End If
            'end if 5
           
            ' Mailfile oeffnen
            Set n_dbMail = n_ses.GetDatabase(varMailFile(0), n_ses.UserName)
           
            ' Mailfile geoeffnet ?
            If n_dbMail Is Nothing Then Exit Sub
            'if 6 und exit
            If n_dbMail.IsOpen Then
            'if 7
                ' Mailfile erfolgreich geoeffnet => Mail mit Anhang erstellen
                Set n_docMail = n_dbMail.CreateDocument
                If n_docMail Is Nothing Then Exit Sub
                'if 8 und exit
                ' Maildokument einstellen
                With n_docMail
               
                    Call .ReplaceItemValue("Form", "Memo")
                    Call .ReplaceItemValue("Subject", "hier kommt das Thema rein")
                    Call .ReplaceItemValue("SendTo", sAdress)
                    Call .ReplaceItemValue("Principal", sAdress)
                   
                End With
               
                ' Erstellen des Dateianhanges
                If CreateAttachement(n_docMail, sFile) Then
                    'if 9
                    ' Anhang erfolgreich erstellt
                    ' Mail senden
                    Call n_docMail.Send(False)
                   
                End If 'end if 9
               
            End If 'end if 7
           
        End If 'end if 4
       
    End If 'end if 3
   
End Sub

Function GetMailFile(ByVal sSearch As String, n_dbN As NotesDatabase) As String

    ' returns the mail-server and the mail-file of the given user (e-mail address)
    ' format of the return-string is <mail-server~mail-file>
   
    Dim n_vwUser As NotesView
    Dim n_docUser As NotesDocument
   
    GetMailFile = ""
   
    ' Ansicht aller Notes-User einstellen
    Set n_vwUser = n_dbN.GetView("($Users)")
    If n_vwUser Is Nothing Then Exit Function
   
    ' Dokument des angegenenen Benutzers ermitteln
    ' aus deisem wird der Mailserver und Mailfile ermittelt
    Set n_docUser = n_vwUser.GetDocumentByKey(LCase(Trim(sSearch)), True)
    If n_docUser Is Nothing Then Exit Function
   
    GetMailFile = n_docUser.GetItemValue("MailServer")(0) & "~" & n_docUser.GetItemValue("MailFile")(0)
   
End Function

Function CreateAttachement(n_docM As NotesDocument, sFileName As String) As Boolean

    ' Erstellt den Anhang in der zu sendenden Mail
    ' und schreibt den Mailtext
   
    Dim n_rtBody As NotesRichTextItem
    Dim n_eoFile As NotesEmbeddedObject
   
    CreateAttachement = False
   
    ' create the Body-Field
    Set n_rtBody = n_docM.CreateRichTextItem("Body")
    If n_rtBody Is Nothing Then Exit Function
   
    ' text of the mail
    Call n_rtBody.AddNewLine(1)
    Call n_rtBody.AppendText("1. Zeile text")
    Call n_rtBody.AddNewLine(1)
    Call n_rtBody.AppendText("2. Zeile text")
    Call n_rtBody.AddNewLine(3)
   
    ' create attachement
    Set n_eoFile = n_rtBody.EmbedObject(1454, "", sFileName)
    If n_eoFile Is Nothing Then Exit Function
   
    CreateAttachement = True
   
End Function

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #52 am: 02.07.09 - 11:41:57 »
Zitat
ist die Schreibweise : StrFile = sh.Range("E" & CStr(intRow)) in excel auf die Spalte E : U:\anhang\name.pdf richtig?
Prinzipiell Ja. Jedoch - ist mir auch erst wieder im Nachhinein eingefallen koennte man auch schreiben
Code
strFile = sh.Range("E" & CStr(intRow)).Value

Zitat
Ich glaube es liegt daran, daß kein Attachment erzeugt wird!
Wie muss man das jetzt verstehen?

Wenn Du in der betreffenden Spalte ("E") den Pfad zu der Datei hinterlegt hast und diese Datei auch vorhanden sein, so sollte durch die Zeile
Code
Set n_eoFile = n_rtBody.EmbedObject(1454, "", sFileName)
auch ein entsprechender Dateianhang in der Mail erzeugt werden.
Frage:
Liegt die Datei auch in diesem Verzeichnis (ist diese vorhanden)?
Was passiert bei der Ausfuehrung des Codes?


Andreas

Offline Boulbadaoui

  • Frischling
  • *
  • Beiträge: 41
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #53 am: 02.07.09 - 12:41:05 »
ja die Dateien sind vorhanden und liegen richtig auf dem Verzeichniss, wie im Spalte E beschrieben!

Offline Boulbadaoui

  • Frischling
  • *
  • Beiträge: 41
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #54 am: 03.07.09 - 12:26:46 »
Hallo,
ist die schreibeweise richtig:
Set n_dbNames = n_ses.GetDatabase("valnotes", "mboulbad.nsf")
'Valnotes=Domino_Server
'mboulbad.nsf=Maildatenbank des Absender

___________________________________
es wird auch nicht   zu: Function GetMailFile(ByVal sSearch As String, n_dbN As NotesDatabase) As String  springen!

Offline Boulbadaoui

  • Frischling
  • *
  • Beiträge: 41
Re: Serienmail(Serienbrief) mit personalisierte-Anhang
« Antwort #55 am: 03.07.09 - 14:57:38 »
Danke an Alle
Dank an Andreas,
es hat wunderbar funktioniert
Merci vielmals! ;)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz