spidermike
Goto Top

Skript für automatisierten E-Mail Versand diverser PDFs an diverse E-Mailadressen

Hallo Forum,

ich erstelle mittels Microsoft Reportserver (SQL Server Reporting Services) monatlich für ca. 500 Filialen eine Report mit Charts und diversen Tabellen.
Diese Reports speichere ich in einem Ordner, der ebenso über einen SQL-Job vorab erstellt wird (JJJJ-MM)
Sobald mein Job gelaufen ist (entweder durch manuelle Auslösung oder einem hinterlegtem Timer) befinden sich in diesem Monatsordner 500 PDFs (012.pdf, 033.pdf, 112.pdf, usw..)
Diese PDF muss ich jetzt an die entsprechenden Filialen per E-Mail senden..

Nun ist es aber nicht so, dass die Filale 1 auch das PDf 001.pdf bekommt..

Eigentlich sieht meine Verteilertabelle so aus:

Report Filiale E-Mail
012 12 xyz@irgendwo.de
033 33 abc@web.de
112 112 caz@aol.com
usw...


Mit dieser Verteilertabelle (die sich immer mal wieder ändert.. und die ich dann in der SQL-DB in der Tabelle dbo.verteiler entsprechend aktualisiere)
möchte ich jetzt mittels Script (oder wie auch immer..) entsprechende E-Mails versenden.

An: xyz@irgendwo.de
Cc:
Bcc: ich_als_Admin@home.de
Anlage: 012.pdf

Sehr geehrter Kunde,


Ich würde das ganze natürlich gerne über ein (Absender-)Konto meines Exchange-Servers laufen lassen, damit ich ggf. in "gesendete Objekte" nachvollziehen kann, dass die E-Mails wirklich rausgegangen sind. (Mit einem Cronjob über irgendeinem SMTP habe ich ja keine Kontrolle)


KEINE Ahnung, wie ich das anstellen soll.. Ich weiß aber, dass es da draußen eine(n) gibt die/der mir helfen kann face-smile

Beste Grüße
Spidermike

Content-Key: 311770

Url: https://administrator.de/contentid/311770

Printed on: April 18, 2024 at 11:04 o'clock

Member: agowa338
agowa338 Aug 05, 2016 at 00:53:02 (UTC)
Goto Top
Speichern als "Senden.ps1" und ausführen über "Rechtsklick" => "Mit PowerShell ausführen".
Am Anfang des Skripts musst du noch deine Werte eintragen.
# Folders
$FolderReports = "D:\Reports"; # Where your reports are  

# SQL-Server settings
$Database = "Database" # Database name  
$Server = "SERVER\SQLEXPRESS"; # SQL-Server Instanz  

# Connect to SQL and query data, extract data to SQL Adapter
$SqlQuery = "SELECT [Report],[Filiale],[E-Mail] FROM [dbo].[verteiler]"; # Your distributiontable  

# The mail
$MailSubject = "Enter subjectline here"  
$MailBody = '  
Sehr geehrter Kunde,
.......
......
.....
' # Can be plain text or html  

# To use this script you must have a database that looks like this:
## Database Layout
## "Report","Filiale","E-Mail"  
## "012","12","xyz@irgendwo.de"  
## "033","33","abc@web.de"  
## "112","112","caz@aol.com"  

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;Integrated Security = True"  
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$nRecs = $SqlAdapter.Fill($DataSet)
$nRecs | Out-Null
$objTable = $DataSet.Tables

# Send the E-Mail using Outlook
$ol = New-Object -comObject Outlook.Application
$objTable | ForEach-Object {
    $mail = $ol.CreateItem(0)
    $Mail.To = $_."E-Mail"  
    $Mail.BCC = $mailBCC
    $Mail.Subject = $MailSubject
    if ($MailBody -like '*<HTML>*</HTML>*') {  
        $Mail.HTMLBody = $MailBody
    } else {
        $Mail.Body = $MailBody
    }
    $Mail.Attachments.Add("$FolderReports\$($_."Report").pdf")  
    $Mail.Send()
}
Member: Spidermike
Spidermike Aug 05, 2016 at 05:41:53 (UTC)
Goto Top
Moin agowa338,

ich bin bereits jetzt schon begeistert über die schnelle Hilfe!

Werde mich heute Nachmittag mal ranmachen und es ausprobieren. Info folgt selbstverständlich!

Schon mal vorab: Besten Dank für Deine Mühe!

Gruß
Spidermike