Email Versenden mit Powershell

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

    • Email Versenden mit Powershell

      Hallo,

      ich möchte mit Powershell ein EMail über den David Server verschicken. Dieser Mail sollte aber im Ausgangsverzeichnis des Versenders erscheinen.
      Leider krieg ich es nicht hin, dass die Testmails im Ausgangsverzeichnis landen ;( ?( .
      Hab ihr ein Tipp für mich :?:

      Hier ist ein Test Code:
      $smtp = New-Object System.Net.Mail.SmtpClient
      $MailMessage = New-Object system.net.mail.mailmessage
      $smtp.Host = "<hostname>"
      $MailMessage.From = "<from email>"
      $MailMessage.To.Add("<to email>")
      $MailMessage.Body = ' @@MAIL@@
      @@NUMMER <email>@@
      @@VON <email>@@
      @@AN <email>@@
      @@BETREFF Test@@
      @@OWN <username>@@
      <!DOCTYPE html>
      <html lang="de">
      <meta charset=\"utf-8\">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <head>
      <title>
      Send email via David
      </title>
      </head>
      <body>
      <div id="message_body" style="color: black">
      <p>
      This is a Test Mail
      </p>
      </div>
      </body>
      </html>'
      $MailMessage.IsBodyHtml = $true
      $SmtpUser = New-Object System.Net.NetworkCredential
      $SmtpUser.UserName = "<username>"
      $SmtpUser.Password = "<password>"
      $smtp.Credentials = $SmtpUser
      $smtp.Send($MailMessage)

      Danke in vorraus
      Gruß
      Kossi
    • Hallo Kossi,

      hier mal ein Auszug aus meinem Code. Vielleicht hilft dir das Beispiel weiter.
      Relevant zum Speichern ist die letzte Zeile. Im Ordner "out" kannst du einzelne Unterordner ansprechen. In meinem Beispiel ist der Ordner "0" der erste Unterordner im Ausgang des Users. So trenne ich die automatisch versendeten Mails von den "normal" versendeten Mails.

      Source Code

      1. Set oArchiveOut = oAccount.GetArchive("\\...\david\archive\user\" & UserPath & "\out\0")
      2. Set oMailItem = oArchive.NewItem(DvApi32.DvItemTypes.DvEMailItem)
      3. .
      4. .
      5. oMailItem.Send
      6. oMailItem.Save oArchivout, MailItem
      Über das Script werden bei uns Rechnungen und Angebote vom ERP-System per Batch versendet. Eine Kopie wird in das Unterverzeichnis des Postausgangs des jeweiligen Sachberarbeiters abgelegt.

      Viel Erfolg
      Kai-Uwe
    • Danke Kai-Uwe für deine Antwort.

      Den David über das Office COM-Add-Ins einzubinden und das Mail versenden hat geklappt. Die API als Assembly im Powershell Skript einzubinden und ein Mail abzuschicken habe ich noch nicht hingekriegt.

      Sub Test_Send2()
      'Late Binding
      Dim oApp As Object
      Dim oAccount As Object
      Dim oArchive As Object
      Dim oMailItem As Object
      Dim oAttachment As Object
      Dim l As Long
      Dim sAdresse As String
      Dim sAufDat As String
      Dim sHinweis As String
      Set oApp = CreateObject("DVOBJAPILib.DvISEAPI")
      Set oAccount = oApp.Logon("", "", "", "", "", "AUTH")
      ' Set oArchive = oAccount.GetSpecialArchive( _
      ' DvApi32.DvArchiveTypes.DvArchivePersonalOut)
      Set oArchive = oAccount.GetArchive("\\...\david\archive\user\" & UserPath & "\out\")
      Set oMailItem = oArchive.NewItem(2)
      l = oMailItem.Recipients.Add("....@gmx.de", "MAIL", "")
      oMailItem.Subject = "Test Mail"
      oMailItem.BodyText.HTMLText = "Das ist ein HTMLText"
      oMailItem.Options.UserHold = False
      End Sub

      So morgen versuch ich das mal in Powershell zum laufen zu bringen.

      Gruß
      Kossi
    • Hallo Zusammen,

      kurz noch als Hinweis dazu: Im ersten Posting hat Kossi versucht die Mail per SMTP über den David Postman zu versenden. In dem Falle ist leider keine Zuordnung zu einem Benutzer möglich, soweit ich das im Kopf habe.

      Eventuell geht es, wenn man die Betreffende E-Mailadresse als AUTH Domainnamen einträgt (klingt komisch, könnte aber so sein ;) ). Wir haben diese Option in älteren Versionen benutzt, um eine userbezogene SMTP Authentifizierung hinzubekommen (bevor es die erweiterten Optionen im Postman diesbezüglich gab). Ich bin mir aber gerade nicht mehr sicher, ob die Mails in dem Falle im Userausgang gelandet sind oder nicht.

      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
      ----------------------------------
    • Hallo,

      $oApp = New-Object -ComObject DVOBJAPILib.DvISEAPI
      $oAccount = $oApp.Logon("", "", "", "", "", "AUTH")
      $userArchive = "\user\archive\ausgang"
      $oArchive = $oAccount.GetArchive($userArchive)
      $oMailItem = $oArchive.NewItem(2)
      $number = $oMailItem.Recipients.Add("...@gmx.de", "MAIL", "")
      $oMailItem.Subject = "Test Mail"
      $oMailItem.BodyText.HTMLText = "Das ist ein Test HTMLText"
      $oMailItem.Options.UserHold = False
      $file = "C:\Attachment.txt"
      $oAttachment = $oMailItem.Attachments.Add($file, "")

      Bis hierhin funktioniert alles Wunderbar.

      Aber beim
      $oMailItem.Send()
      erhalte ich ein "System.AccessViolationException: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben."


      Meine erste Frage ist warum wird diese Ausnahme nicht im VBA geworfen?
      Meine zweite Frage ist hat jemand von euch solch eine Ausnahme programmatisch gelöst?

      Danke,
      Gruß
      Kossi
    • Hallo Kossi,

      grundsätzlich erscheint mir das richtig. In Deinem VBA Beispiel oben wird allerdings keine Send Methode aufgerufen.

      Warum da in PowerShell eine Fehlermeldung geworfen wird, kann ich Dir nicht sagen. Ich vermute mal, dass PowerShell etwas dagegen hat, was die Tobit API in dem Moment versucht.

      Hast Du mal ein einfachstes Beispiel versucht, ohne Anhänge, etc.?
      Versuch alternativ auch mal den Versand über das MessageItem2 statt dem MailItem.

      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
      ----------------------------------