PowerShell 2.0 sendMail Skript
Hallo liebe Admins,
ich kämpfe momentan(schon etwas länger) mit automatisiertem Mailversand. PowerShell 4 ist kein Problem, das läuft. Hier das Skript:
PowerShell 4 Skript:
Hier mein PowerShell 2 Skript
Die Antwort vom Server wenn ich das 2.0 Skript ausführe ist dann folgende:
"Falsche Befehlsfolge. Die Serverantwort war: This mail
server requires authentication when attempting to send to a non-local
e-mail address. Please check your mail client settings or contact your
administrator to verify that the domain or address is defined for this
server."
Habt ihr eine Idee was das Problem sein kann? Ich vermute nach etwas Recherche etwas mit dem Passwort wie es an den SMTP weiter gegeben wird.
Viele Grüße
Robert
ich kämpfe momentan(schon etwas länger) mit automatisiertem Mailversand. PowerShell 4 ist kein Problem, das läuft. Hier das Skript:
PowerShell 4 Skript:
#in Powershell eingeben: (Get-Credential).password | ConvertFrom-SecureString > V:\SVEN\BATCH\Mail\Statistik\password_statistik.txt
$SMTPServer = "webmail.test4test.com"
$pw = Get-Content X:\BATCH\MAIL\Statistik\Password_statistik.txt | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PSCredential "statistik@test4test.com", $pw
$From = "statistik@test4test.com"
$To = '''
$Cc = ''
$Subject = ""
$Body = @"
"@
# Optional Get-ChildItem -Recurse -Filter *.log
Get-ChildItem “X:\statexport\VILE\VILE.pdf” `
| Where {-NOT $_.PSIsContainer} `
| foreach {$_.fullname} `
|Send-MailMessage -To $To -Cc $Cc -From $From -Subject $Subject -Body $Body -SmtpServer $SMTPServer -Credential $cred -encoding ([System.Text.Encoding]::UTF8)
Hier mein PowerShell 2 Skript
$SMTPServer = "webmail.test.at"
$username = "statistik@test4test.com"
$From = "statistik@test4test.com"
$To = 'test@test4test.com'
$Subject = "Test 11:11"
$Body = @"
Testnachricht
"@
$secure2 = get-content V:\passwort.txt | convertto-securestring -key (1..16)
$creds = New-Object System.Management.Automation.PSCredential ($username, $secure2)
Get-ChildItem “V:\Test\*.txt” `
| Where {-NOT $_.PSIsContainer} `
| foreach {$_.fullname} `
|Send-MailMessage -To $To -From $From -Subject $Subject -Body $Body -SmtpServer $SMTPServer -Credential $creds -encoding ([System.Text.Encoding]::UTF8)
Die Antwort vom Server wenn ich das 2.0 Skript ausführe ist dann folgende:
"Falsche Befehlsfolge. Die Serverantwort war: This mail
server requires authentication when attempting to send to a non-local
e-mail address. Please check your mail client settings or contact your
administrator to verify that the domain or address is defined for this
server."
Habt ihr eine Idee was das Problem sein kann? Ich vermute nach etwas Recherche etwas mit dem Passwort wie es an den SMTP weiter gegeben wird.
Viele Grüße
Robert
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 248938
Url: https://administrator.de/forum/powershell-2-0-sendmail-skript-248938.html
Ausgedruckt am: 22.12.2024 um 17:12 Uhr
15 Kommentare
Neuester Kommentar
Das Passwort-File habe ich auf dem Rechner erzeugt, das sollte passen.
auch mit dem selben Useraccount ?versuche mal diese Funktion:
Function sendmail($FROM,$TO,$SUBJECT,$BODY,$ATTACHMENTS = $null){
$SMTPHOST = "smtp.server.de"
$SMTPPORT = 25
$SMTPUSER = "USERNAME"
$SMTPPass = "PASSWORD"
$SMTPClient = New-object System.Net.Mail.SmtpClient($SMTPHOST,$SMTPPORT)
$SMTPClient.EnableSsl = $true
$Mail = new-object System.Net.Mail.MailMessage
$Mail.from = $FROM
$Mail.to.add($TO)
$SMTPClient.Credentials = new-object System.Net.NetworkCredential($SMTPUSER,$SMTPPass)
$Mail.Subject = $SUBJECT
$Mail.Body = $BODY
# Add Attachments
if ($ATTACHMENTS){
foreach ($att in $ATTACHMENTS){
$Mail.Attachments.Add($att)
}
}
$SMTPClient.Send($Mail)
}
sendmail "absender@domain.com" "empfaenger@domain.com" "DEIN BETREFF" "DER INHALT"
Zitat von @Tranministrator:
Kann man in dein Beispiel die Verschlüsselung des Kennwortes integrieren?
ja, du könntest einfach deinen Secure-String zurück in Klartext wandeln:, und als Passwort verwenden.Kann man in dein Beispiel die Verschlüsselung des Kennwortes integrieren?
das geht so:
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR((ConvertTo-SecureString -String $deinSecureText)))
sorry das vorherige hatte ich gelöscht, gab's leider nur unter neueren .NET Versionen...
Grüße Uwe
Function sendmail($FROM,$TO,$SUBJECT,$BODY,$ATTACHMENTS = $null){
$SMTPHOST = "webmail.xxx.at"
$SMTPPORT = 25
$SMTPUSER = "edi@xxx.com"
$SMTPClient = New-object System.Net.Mail.SmtpClient($SMTPHOST,$SMTPPORT)
$SMTPClient.EnableSsl = $false
$Mail = new-object System.Net.Mail.MailMessage
$Mail.from = $FROM
$Mail.to.add($TO)
# SecureString erstellen
$SECURE= get-content "V:\passwort.txt" | convertto-securestring -key (1..16)
# Klartextpassword extrahieren
$SMTPPASS = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SECURE))
$SMTPClient.Credentials = new-object System.Net.NetworkCredential($SMTPUSER,$SMTPPASS)
$Mail.Subject = $SUBJECT
$Mail.Body = $BODY
# Add Attachments
if ($ATTACHMENTS){
foreach ($att in $ATTACHMENTS){
$Mail.Attachments.Add($att)
}
}
$SMTPClient.Send($Mail)
}
sendmail "edi@xxx.com" "xxx@hotmail.com" "test" "DER INHALT"
Du kannst die Anhänge einfach als String-Array hinter das Body Argument anhängen. Das hatte ich ja schon mit eingebaut.
Grüße Uwe
Äh Moment dann noch die Zeile 23 so ändern (Ich hatte die Funktion damals für was anderes verwendet sorry)
sendmail "XXX@gmx.at" "XXX@hotmail.com" "test" "DER INHALT" @("c:\doc1.xlsx","c:\doc2.xlsx")
Äh Moment dann noch die Zeile 23 so ändern (Ich hatte die Funktion damals für was anderes verwendet sorry)
$Mail.Attachments.Add($att)
Zitat von @Tranministrator:
Gibt es da auch etwas einfaches für *.* oder *.log Dateien? Also alle Dateien eines Ordners?
Hättest du auch gleich sagen können, dann hätten wir es so lassen können Gibt es da auch etwas einfaches für *.* oder *.log Dateien? Also alle Dateien eines Ordners?
Und zwar änderst du dann Zeile 23 wieder so ab
$Mail.Attachments.Add($att.FullName)
$files = dir "c:\temp\*.log"
sendmail "XXX@gmx.at" "XXX@hotmail.com" "test" "DER INHALT" $files
Sorry ich schreibe auf dem Tablet da geht es etwas länger ...
Die Funktion ist schon etwas älter und nicht mehr auf dem aktuellen Stand , sonst hätte ich das schon alles optimiert, ..
Schönen Abend noch
Uwe