Jump to content

Powershell - SQL, Foreach und SendMail


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Zusammen,

 

ich stehe gerade vor einem größeren Problem. Ich will/muss jede Nacht ein Powershell Script ausführen, welches Daten aus unserer SQL DB holt, E-Mails versendet und Daten wieder in eine SQL DB schreibt. 

Schritt 1 und 3 gehen auch ohne Probleme, jedoch nicht der E-Mail Versand. 

Hier wird mir immer die ein und die selbe E-Mail verschickt, jedoch mit einem Empfängern mehr. Sprich wenn ich im Select Statemante nur die TOP 10 nehme, addieren sich die Empfänger immer weiter hoch, bis die letzte E-Mail 10 Empfänger hat... 

 

Hier mal das Script:

#clear $error bei start
$Error.Clear()

#SMTP Variablen
$SmtpServer = "sbs"
$SmtpUser = "smtpuser"
$SmtpPasswd = "smtppasswort!"

#E-Mail Variable
$MailFrom = "von@domain.de"
$MailDisplay = "Display"
$MailTo = "test@gmx.de"
$Subject = "Titel"

#SMTP Client
$SMTPClient = New-object System.Net.Mail.SmtpClient($SmtpServer)
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($SmtpUser, $SmtpPasswd)

#SQL Variablen
$SQLServer = "SQL-Server"
$SQLSelectQuery = "Select irgendwas;"

#SQL Select Connection 
$SQLConnection = New-Object System.Data.SqlClient.SqlConnection
$SQLConnection.ConnectionString = "Server = $SQLServer; Integrated Security = True"

#SQL Select Query
$SQLCmd = New-Object System.Data.SqlClient.SqlCommand
$SQLCmd.CommandText = $SQLSelectQuery
$SQLCmd.Connection = $SQLConnection

#SQL Select in Array Adapter
$SQLAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SQLAdapter.SelectCommand = $SQLCmd
$DataSet = New-Object System.Data.DataSet
$SQLAdapter.Fill($DataSet)

#Close Select Connection
$SqlConnection.Close()

#SendMail Client
$Sender = new-object System.Net.Mail.MailAddress($MailFrom, $MailDisplay) 
$MailMessage = new-object System.Net.Mail.MailMessage
$MailMessage.Subject = $Subject
$MailMessage.Sender = $Sender #DisplayName
$MailMessage.From =  $Sender #E-Mail Adresse

$MailMessage.Body = $Body


#SQL INSERT Connection
$conn = New-Object System.Data.SqlClient.SqlConnection("Server = $SQLServer; Integrated Security = True")
$conn.Open()
$cmd = $conn.CreateCommand()

#SQL Select foreach Array
foreach ($row in $DataSet.Tables[0].Rows)
{

$Datum = $row[0].ToString().Trim()
$Mail = $row[1].ToString().Trim()
$Anrede = $row[2].ToString().Trim()
$ReiseID = $row[3].ToString().Trim()
$Reise_Titel = $row[4].ToString().Trim()
$BuchungsID = $row[5].ToString().Trim()
$KundenNr = $row[6].ToString().Trim()
$Note = $row[7].ToString().Trim()
$Datum_Send = $row[8].ToString().Trim()

$Body = "$Anrede und weiterer Test "„$Reise_Titel""  asdasd "

#Mailto
$MailMessage.To.add($Mailto)
#Send Mail
$SMTPClient.Send($MailMessage)

#SQL Insert Query
$cmd.CommandText = "INSERT datenbank.dbo.KFB_LOG Values ('$KundenNr', '$BuchungsID', '$ReiseID', '$Reise_Titel', '$Anrede', '$Mail', '$Note', '$Datum', '1', '$Datum_Send') ;"
$cmd.ExecuteNonQuery()


}

#Close Insert Connection
$conn.Close()

Wenn ich mir nun z.B. mit echo einfach nur den Body in der Foreac schleife ausgeben lasse, bekomme ich auch unterschiedliche angezeigt, genau so wie es bei den Mails. Nur beim Mail versand, macht er diese Probleme...


Hat einer von euch einen Tipp für mich?

Vielen Dank! 

 

EDIT: OK, kaum fragt man nach, findet man die Lösung... einfach die SendMail Client infos in die Foreach Schleife schreiben und es geht....

bearbeitet von g2sm
Link zu diesem Kommentar

Schau dir mal Send-MailMessage (http://technet.microsoft.com/en-us/library/hh849925.aspx) an.

 

Damit brauchst du es nicht mittels .Net Objekten instanzieren, sondern einfach per cmdlet nutzen.

 

Dann packst du Send-MailMessage mit deinen Parametern in deine for und dann sollte es auch gehen.

 

Zudem vermute ich in Zeile

$MailMessage.Body = $Body

den Fehler.

Das muss mit unten in dein for

Link zu diesem Kommentar

Hi,

 

vielen Dank für deine Antwort.

Ich hatte es am anfang mit Send-MailMessage, aber dabei traten irgendwelche (ich weiß nicht mehr welche) Probleme auf, aus dem Grund bin ich auf .Net umgestiegen. 

 

Den Fehler hatte ich auch schon gefunden (wie immer kurz nach dem ich den Beitrag geschrieben habe), steht auch schon im Edit :) 

 

Gibt es hier ein Close\Erledigt Button? Wenn ja, find ihn nicht xD

 

Vielen Dank!

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...