.Send Befehl will einfach nicht funktionieren.

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • .Send Befehl will einfach nicht funktionieren.

      Hallo,

      ich verzweile gerade ein wenig. || ||

      Wir verschicken aus unserem ERP-System seit längerer Zeit Mails mit PDF Anhang. Diese werden quasi im Editor geöffnet und müssen dann versendet werden. Da das E-Mail aufkommen aber mittlerweile größer geworden ist, möchten wir diesen Schritt sparen, sodass Tobit die Mails direkt versendet ohne sie anzuzeigen.


      Source Code

      1. Dim oApp
      2. Dim oAccount
      3. Dim oArchive
      4. Dim oItem
      5. Dim oMailItem
      6. Dim oAttachment
      7. Dim TobitPath
      8. Dim TSrv
      9. Dim Template
      10. 'TEST ARRAY
      11. 'Dim arr_Empfaenger(0, 1)
      12. InitTobit()
      13. Create_NewMail()
      14. '*********************************************************************************
      15. '* SUB InitTobit() *
      16. '*********************************************************************************
      17. Sub InitTobit()
      18. ON ERROR RESUME NEXT
      19. 'Initialisiert die Tobit API
      20. 'Anwendungsverzeichnis des Tobit InfoCenters aus der Registry auslesen
      21. Set WSHShell = CreateObject( "WScript.Shell" )
      22. ShellCmd = "HKCU\Software\Tobit\Tobit InfoCenter\Settings\ProgramDirectory"
      23. TobitPath = WSHShell.RegRead( ShellCmd )
      24. 'Objekt der DvISEAPI erzeugen
      25. Set oApp = CreateObject("DVOBJAPILib.DvISEAPI")
      26. 'Account laden (des lokal angemeldeten Benutzers)
      27. Set oAccount = oApp.Logon("", "", "", "", "", "NOAUTH")
      28. 'Alle Archive einlesen
      29. Set oArchiveRoot = oAccount.ArchiveRoot
      30. Set oArchives = oArchiveRoot.Archives
      31. 'Tobit Servernamen auslesen (Hostname des Tobit Servers in der Regel)
      32. Tsrv = oAccount.ServerName
      33. 'Vorlagenverzeichnis einlesen
      34. ShellCmd = "HKCU\Software\Tobit\Tobit InfoCenter\Servers\" & Tsrv & "\TemplateFN"
      35. Template = WSHShell.RegRead( ShellCmd )
      36. 'Falls möglich Vorlage einlesen
      37. IF Template <> "" THEN
      38. 'Den Pfad abschneiden
      39. Path = Template
      40. filepart = Right(template,13)
      41. Path = replace(template,filepart,"")
      42. 'Das Archiv ermitteln
      43. For each oArc in oArchives
      44. IF oArc.ID = Path THEN
      45. 'Das MailItem ermitteln
      46. For each obj in oArc.AllItems
      47. IF obj.TextSource = Template THEN
      48. SET oItem = obj
      49. END IF
      50. Next
      51. End IF
      52. Next
      53. END IF
      54. End Sub
      55. '*********************************************************************************
      56. '* SUB Create_NewMail() *
      57. '*********************************************************************************
      58. Sub Create_NewMail()
      59. dim vHtml
      60. dim vAttachment, vSubject, vTo, vBCC
      61. dim vStackSize
      62. '**************************
      63. ' Daten holen
      64. vTo = Aeins.JVARS_GET(3551, "JVAR_TEMPWERT_3")
      65. vSubject = Aeins.JVARS_GET(3551, "JVAR_TEMPWERT_2")
      66. vAttachment = Aeins.JVARS_GET(3551, "JVAR_TEMPWERT_4")
      67. vBCC = Aeins.JVARS_GET(3551, "JVAR_VERSANDOUTLOOK_BCC")
      68. vHtml = Aeins.JVARS_GET(3551, "JVAR_TEMPWERT_1")
      69. vHtml = Replace(vHtml, Chr(10) & Chr(10), "<br>")
      70. vHtml = Replace(vHtml, Chr(13), "<br>")
      71. '**************************
      72. 'Tobit Archiv einlesen
      73. Set oArchive = oAccount.GetSpecialArchive(102) '102 = Ausgangsarchiv
      74. 'Neuen Archiveintrag anlegen
      75. Set oMailItem = oArchive.CreateArchiveEntry(2) '0 = unbekannt, 1 = Adresse, 2 = Email, 3 = Fax, 4 = SMS, 5 = VoiceMail, 6 = TMAIL, 7 = Kalendereintrag, (...)
      76. With oMailItem
      77. .Subject = vSubject
      78. 'Empfänger der Nachricht
      79. .Fields("SRTo").Value = vTo
      80. ' TEST
      81. ' arr_Empfaenger(0, 0) = Aeins.JVARS_GET(3551, "JVAR_TEMPWERT_3")
      82. 'arr_Empfaenger(0, 1) = Aeins.JVARS_GET(3551, "JVAR_TEMPWERT_3")
      83. '.Fields("To").Value = arr_Empfaenger
      84. 'Priorität der Nachricht
      85. .Fields("Priority").Value = 0 '0 = Normal, 1 = Low, 2 = Important
      86. 'Daten der Vorlage einlesen
      87. .Fields("HTMLDisplayContent").Value = vHtml
      88. 'vorher StackSize = 1000
      89. vStackSize = 5
      90. Do While vStackSize > 0
      91. vAttachment = ""
      92. vAttachment = Aeins.JVARS_GET(3551, "JVAR_VERSANDOUTLOOK_DATEI_" & vStackSize)
      93. if len(vAttachment) > 0 then
      94. oMailItem.Attachments.Add ""+vAttachment+"", vAttachment
      95. call Aeins.JVARS_SET(3551, "JVAR_VERSANDOUTLOOK_DATEI_" & vStackSize, "")
      96. end if
      97. vStackSize = vStackSize - 1
      98. Loop
      99. 'Nachricht speichern
      100. .Save
      101. End With
      102. 'Nummer des Eintrags der soeben gespeicherten Email auslesen (wichtig für Shell Aufruf!)
      103. oRecNo = oMailItem.Fields("RecNo").Value
      104. 'Über die Shell das InfoCenter starten und dort die soeben erzeugte Nachricht im Editor öffnen
      105. ' zum TESTEN mal ausgeklammert BEWIRKT DAS DIE MAIL NICHT IM EDITOR GEÖFFNET WIRD!
      106. 'set wshshell = CreateObject( "WScript.Shell" )
      107. 'ShellCmd = TobitPath & "\DVWIN32.EXE " & oArchive.ID & " /SA=34 /POS=" & oRecNo
      108. 'WSHShell.Exec(ShellCmd)
      109. 'Mail sofort wieder löschen nachdem sie geöffnet wurde, da Sie sonst doppelt versendet wird, bzw. 2x im Postausgangsarchiv liegt
      110. oMailItem.Delete
      111. MsgBox vTo
      112. oMailItem.To = vTo
      113. 'TEST ob das direkte Senden geht LEGT ANSCHEINEND ADRESSE NICHT AN
      114. oMailItem.Send
      115. 'Objekte freigeben um sicherzustellen, dass das Script auch bei mehrmaligem Aufrufen sauber funktioniert
      116. oAccount.Logoff
      117. Set oAccount = Nothing
      118. Set oApp = Nothing
      119. Set oAttachment = Nothing
      120. Set oMailItem = Nothing
      121. Set oArchive = Nothing
      122. Set oArchives = Nothing
      123. Set oItem = Nothing
      124. Set oArchiveRoot = Nothing
      125. End Sub
      126. '*********************************************************************************
      127. '* FUNCTION FixHTMLUmlaute( HTML_Content ) *
      128. '*********************************************************************************
      129. Function FixHTMLUmlaute( HTML_Content )
      130. 'Der Funktion wird ein HTML Fragment übergeben.
      131. 'In diesem werden dann die Umlaute gegen die entsprechenden Codes ersetzt.
      132. RetValue = Replace(HTML_Content,"ä","ä")
      133. RetValue = Replace(RetValue,"Ä","Ä")
      134. RetValue = Replace(RetValue,"ö","ö")
      135. RetValue = Replace(RetValue,"Ö","Ö")
      136. RetValue = Replace(RetValue,"ü","ü")
      137. RetValue = Replace(RetValue,"Ü","Ü")
      138. FixHTMLUmlaute = RetValue
      139. End Function
      Display All

      Anhand dieses Quelltextes sieht man, dass die eigentliche Editierung schon auskommentiert ist, das funktioniert auch.

      Das Problem:
      Die To-Adresse wird nicht mit übergeben, der Anhang auch nicht. Es kommt die Meldung "Nummer fehlt" die Mail erscheint im Eingang und im Ausgang. Je 1x.

      Ansonsten versuche ich hier an zwei Stellen das To zu füllen, aber ohne Erfolg. Mit Arrays habe ich was versucht... aber ich kann sie nichtmal deklarieren.

      Vielleicht habt ihr ja einen Tip.

      Danke, LG Fabien
    • Hallo Fabien,

      zunächst mal eine Info am Rand. Du erzeugst mit "CreateArchiveEntry" ein MessageItem2, kein MailItem. Das ist von der Benennung her etwas verwirrend.

      Ich hab schon länger nichts mehr mit der DvAPI gecoded, daher bin ich nicht mehr so ganz im Thema. Folgendes daher unter Vorbehalt, dass ich den Code richtig lesen konnte hier im Editor und korrekt verstanden habe:

      Das MessageItem2 hat keine Methode oder Eigenschaft "To" (Zeile 139).
      Weiter ist in Zeile 136 noch das oMailItem.Delete drin, Du löschst also das MItem2 vor dem Versand.

      Falls noch nicht geschehen, schau Dir mal die Beispiele in der API Doku an:

      Create IMessageItem2 entry in the personal archive In
      und
      Send HTML mail with inline images

      Am besten auch einfach mal die beiden Beispiele umsetzen und dann Step-By-Step mit euren Daten füllen.

      Gruß Jens
      Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

      ----------------------------------
      Jens Suing

      Tobit Software Authorized Partner *****
      Starface Advanced Partner
      work ... for all! Solution Partner
      bintec elmeg Certified Partner
      Kerio Partner
      ----------------------------------
      DIE Spezialisten - J.Suing
      www.schneller-und-besser.de
      DAS Portal: Faq, Forum
      ----------------------------------
      Support und Beratung unter
      02206-95100-0
      ----------------------------------
    • Hi Jens,

      erstmal Danke für die schnelle Antwort!!

      Teardrop wrote:

      zunächst mal eine Info am Rand. Du erzeugst mit "CreateArchiveEntry" ein MessageItem2, kein MailItem. Das ist von der Benennung her etwas verwirrend.
      das verstehe ich nicht ganz. Zumindest konnte ich in keinem Quelltext bislang was anderes lesen.

      Mit diesem Beitrag hier

      [Gelöst]Erstellen und versenden von EMails über die dvapi32 mit Vorlagen und Latebinding in VBA

      Dachte ich komme dem Ziel am nächsten aber ich bekomme dieses "To" nicht verorgt.

      Teardrop wrote:

      Weiter ist in Zeile 136 noch das oMailItem.Delete drin, Du löschst also das MItem2 vor dem Versand.
      Es ist eigentlich egal wo und wann ich bislang versuche den .Send Befehl zu starten....

      Es wird nie das "To" versorgt und die Mail steht mit Fehler und ohne Adressat im Ein und Ausgang.

      Teardrop wrote:

      Das MessageItem2 hat keine Methode oder Eigenschaft "To" (Zeile 139).
      Das Messageitem2 also mein/unser oMailItem?

      Teardrop wrote:

      Falls noch nicht geschehen, schau Dir mal die Beispiele in der API Doku an:

      Create IMessageItem2 entry in the personal archive In
      und
      Send HTML mail with inline images
      Wo genau finde ich diese Beispiele?

      Sorry für die Fragerei. Ich bin in der VBA-Programmiersprache nicht zu Hause.

      Die "normale" Editierung und das anschließende Senden geht ja auch. Aber ebn nicht das direkt, automatisierte ".Send"

      Gerne schaue ich mir aber noch weitere Beispiele an...

      LG und DANKE, Fabien
    • Hallo Fabien,

      bisher hast Du ja noch kein Senden über die API benutzt, sondern nur über den Client. Daher ging das.

      VB ist auch nicht meine Welt, ich bin in Sachen DvAPI auch eher mit C# unterwegs.

      Kann es sein, dass Dir die API Dokumentation gar nicht vorliegt? Die kann man unter club.tobit.com herunterladen, wenn man sich dort mit SiteID und Passwort einloggt.
      Der Link geht aber auch ohne Login: dvupdate.chayns-static.space/ger/developer/fx12-dvapi32.zip

      Dort findest Du ganz am Anfang verschiedene Beispiele und in der Beschreibung der Methode "CreateArchiveEntry" vom Objekt "Archive" findest Du

      CreateArchiveEntry
      Generates a new entry in the archive (at the first available entry) and
      returns a MessageItem2 object back to the generated entry.


      Schau Dir in der Doku auch mal den Object Browser an. Da erkennt man die verschiedene Objekte und Abhängigkeiten ganz gut. Und anschließend die entsprechenden Objekte MessageItem2 und MailItem.

      Das MessageItem2 ist neuer soweit ich weiß und es ist ca. um den Faktor 10 schneller, also immer dann wichtig, wenn man viele Daten verarbeitet oder Ordner durchsucht, etc.

      Es ist aber ein allgemeines Objekt und kann nur über die Fields gefüllt werden.
      Dagegen haben die speziellen Objekte (MailItem, CalenderItem, etc.), die vom (normalen) MessageItem abgeleitet werden, spezielle Methoden.

      Gruß Jens
      Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

      ----------------------------------
      Jens Suing

      Tobit Software Authorized Partner *****
      Starface Advanced Partner
      work ... for all! Solution Partner
      bintec elmeg Certified Partner
      Kerio Partner
      ----------------------------------
      DIE Spezialisten - J.Suing
      www.schneller-und-besser.de
      DAS Portal: Faq, Forum
      ----------------------------------
      Support und Beratung unter
      02206-95100-0
      ----------------------------------