Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PowerShell 2.0 sendMail Skript

Frage Entwicklung Batch & Shell

Mitglied: Tranministrator

Tranministrator (Level 1) - Jetzt verbinden

11.09.2014, aktualisiert 20:05 Uhr, 2463 Aufrufe, 15 Kommentare

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:

01.
#in Powershell eingeben: (Get-Credential).password | ConvertFrom-SecureString > V:\SVEN\BATCH\Mail\Statistik\password_statistik.txt 
02.
 
03.
$SMTPServer = "webmail.test4test.com" 
04.
$pw = Get-Content X:\BATCH\MAIL\Statistik\Password_statistik.txt | ConvertTo-SecureString 
05.
$cred = New-Object System.Management.Automation.PSCredential "statistik@test4test.com", $pw 
06.
$From = "statistik@test4test.com" 
07.
$To = ''' 
08.
$Cc = '' 
09.
$Subject = "" 
10.
$Body = @" 
11.
 
12.
 
13.
"@ 
14.
 
15.
 
16.
# Optional Get-ChildItem -Recurse -Filter *.log 
17.
Get-ChildItem “X:\statexport\VILE\VILE.pdf” ` 
18.
| Where {-NOT $_.PSIsContainer} ` 
19.
| foreach {$_.fullname} ` 
20.
|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

01.
 
02.
$SMTPServer = "webmail.test.at" 
03.
$username = "statistik@test4test.com" 
04.
 
05.
 
06.
$From = "statistik@test4test.com" 
07.
$To = 'test@test4test.com' 
08.
$Subject = "Test 11:11" 
09.
$Body = @" 
10.
Testnachricht 
11.
"@ 
12.
 
13.
$secure2 = get-content V:\passwort.txt | convertto-securestring -key (1..16)  
14.
$creds = New-Object System.Management.Automation.PSCredential ($username, $secure2)  
15.
 
16.
Get-ChildItem “V:\Test\*.txt” ` 
17.
| Where {-NOT $_.PSIsContainer} ` 
18.
| foreach {$_.fullname} ` 
19.
|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
Mitglied: colinardo
11.09.2014, aktualisiert um 16:42 Uhr
Hallo Robert,
ich vermute das System auf dem das 2.0 Script läuft hat keine Relay-Rechte auf dem Mailserver, oder du hast das Passwort-File mit einem anderen Useraccount, als dem der das Script jetzt ausführt, erzeugt; denn dann stimmt das Password nämlich nicht mehr.

Grüße Uwe
Bitte warten ..
Mitglied: Tranministrator
11.09.2014, aktualisiert um 16:55 Uhr
Hallo Uwe,

ein Gegentest mit Blat.exe war positiv. Versand war positiv.

Also kann es eigentlich am Mailserver nicht liegen denn die PowerShell 4.0 Variante geht ja ohne Probleme (momentan nicht da ich zu oft falsch gesendet habe via 2.0)

Ich werde es mal mit einem Klartext Versuch starten.

Sorry aber ich bin totaler Laie was das ganze Troubleshooting bzgl. SMTP angeht.

Die Grundbegriffe gehen, aber verstehen tue ich überhaupt nicht warum die Relay Rechte PowerShell versionsabhängig sind.

Das Passwort-File habe ich auf dem Rechner erzeugt, das sollte passen.

Update: der SMTP Server geht mit PowerShell 4.0 wieder

Viele Grüße

Robert
Bitte warten ..
Mitglied: colinardo
11.09.2014, aktualisiert um 19:50 Uhr
Das Passwort-File habe ich auf dem Rechner erzeugt, das sollte passen.
auch mit dem selben Useraccount ?

versuche mal diese Funktion:
01.
Function sendmail($FROM,$TO,$SUBJECT,$BODY,$ATTACHMENTS = $null){ 
02.
  $SMTPHOST = "smtp.server.de" 
03.
  $SMTPPORT = 25 
04.
  $SMTPUSER = "USERNAME" 
05.
  $SMTPPass = "PASSWORD" 
06.
  $SMTPClient = New-object System.Net.Mail.SmtpClient($SMTPHOST,$SMTPPORT) 
07.
  $SMTPClient.EnableSsl = $true 
08.
  $Mail = new-object System.Net.Mail.MailMessage 
09.
  $Mail.from = $FROM  
10.
  $Mail.to.add($TO) 
11.
  $SMTPClient.Credentials = new-object System.Net.NetworkCredential($SMTPUSER,$SMTPPass) 
12.
  $Mail.Subject = $SUBJECT 
13.
  $Mail.Body = $BODY 
14.
  # Add Attachments 
15.
  if ($ATTACHMENTS){ 
16.
      foreach ($att in $ATTACHMENTS){ 
17.
        $Mail.Attachments.Add($att) 
18.
19.
20.
  $SMTPClient.Send($Mail) 
21.
22.
 
23.
sendmail "absender@domain.com" "empfaenger@domain.com" "DEIN BETREFF" "DER INHALT"
Bitte warten ..
Mitglied: Tranministrator
11.09.2014 um 17:21 Uhr
Ja auf dem PC gab es nur einen User Account.

Das Skript werde ich gleich im Anschluss testen. Feedback gibt es noch heute

Viele Grüße

Robert
Bitte warten ..
Mitglied: Tranministrator
11.09.2014 um 17:42 Uhr
Hey Uwe,

bei deinem Skript kommt die Nachricht problemlos an und der SMTP Server zickt auch nicht rum

Hier noch die genaue Fehlermeldung des SMTP Servers:

01.
 
02.
Send-MailMessage : Falsche Befehlsfolge. Die Serverantwort war: This mail server requires authentication when attempting to send to a n 
03.
on-local e-mail address. Please check your mail client settings or contact your administrator to verify that the domain or address is d 
04.
efined for this server. 
05.
Bei X:\sven\Batch\Mail\edi_ueberwachung_XXX.ps1:44 Zeichen:18 
06.
+ |Send-MailMessage <<<<  -To $To -From $From -Cc $CC -BCc $BCC -Subject $Subject -Body $Body -SmtpServer $SMTPServer -Credential $cred 
07.
s -encoding ([System.Text.Encoding]::UTF8)  
08.
    + CategoryInfo          : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpException 
09.
    + FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage
Hast du noch Ideen?

Kann man in dein Beispiel die Verschlüsselung des Kennwortes integrieren?

Viele Grüße

Robert
Bitte warten ..
Mitglied: colinardo
11.09.2014, aktualisiert um 17:48 Uhr
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.
das geht so:
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR((ConvertTo-SecureString -String $deinSecureText)))
Bitte warten ..
Mitglied: Tranministrator
11.09.2014 um 18:36 Uhr
Hmmm das ist wie die Nadel im Heuhaufen

Sagen wir mal ich integriere es und füge deine 2 Skripte zusammen:

01.
 
02.
Function sendmail($FROM,$TO,$SUBJECT,$BODY,$ATTACHMENTS = $null){ 
03.
  $SMTPHOST = "webmail.xxx.at" 
04.
  $SMTPPORT = 25 
05.
  $SMTPUSER = "edi@xxx.com" 
06.
  # $SMTPPass = "" 
07.
   
08.
$SMTPClient = New-object System.Net.Mail.SmtpClient($SMTPHOST,$SMTPPORT) 
09.
  $SMTPClient.EnableSsl = $false 
10.
  $Mail = new-object System.Net.Mail.MailMessage 
11.
  $Mail.from = $FROM  
12.
  $Mail.to.add($TO) 
13.
 
14.
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR((ConvertTo-SecureString -String $deinSecureText))) 
15.
 
16.
 
17.
  $SMTPClient.Credentials = new-object System.Net.NetworkCredential($SMTPUSER,$deinSecureText)) 
18.
  $Mail.Subject = $SUBJECT 
19.
  $Mail.Body = $BODY 
20.
  # Add Attachments 
21.
  if ($ATTACHMENTS){ 
22.
      foreach ($att in $ATTACHMENTS){ 
23.
        $Mail.Attachments.Add($att.FullName) 
24.
25.
26.
  $SMTPClient.Send($Mail) 
27.
28.
 
29.
sendmail "edi@xxx.com" "xxx@hotmail.com" "test" "DER INHALT"
Woher bekomme ich den SecureString als Pfad? Wo stelle ich das ein? Passt sonst alles andere?

Viele Grüße

Robert
Bitte warten ..
Mitglied: colinardo
11.09.2014, aktualisiert um 19:46 Uhr
sorry das vorherige hatte ich gelöscht, gab's leider nur unter neueren .NET Versionen...

01.
Function sendmail($FROM,$TO,$SUBJECT,$BODY,$ATTACHMENTS = $null){ 
02.
  $SMTPHOST = "webmail.xxx.at" 
03.
  $SMTPPORT = 25 
04.
  $SMTPUSER = "edi@xxx.com" 
05.
   
06.
  $SMTPClient = New-object System.Net.Mail.SmtpClient($SMTPHOST,$SMTPPORT) 
07.
  $SMTPClient.EnableSsl = $false 
08.
  $Mail = new-object System.Net.Mail.MailMessage 
09.
  $Mail.from = $FROM  
10.
  $Mail.to.add($TO) 
11.
 
12.
  # SecureString erstellen 
13.
  $SECURE= get-content "V:\passwort.txt" | convertto-securestring -key (1..16) 
14.
  # Klartextpassword extrahieren 
15.
  $SMTPPASS = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SECURE))  
16.
 
17.
  $SMTPClient.Credentials = new-object System.Net.NetworkCredential($SMTPUSER,$SMTPPASS) 
18.
  $Mail.Subject = $SUBJECT 
19.
  $Mail.Body = $BODY 
20.
  # Add Attachments 
21.
  if ($ATTACHMENTS){ 
22.
      foreach ($att in $ATTACHMENTS){ 
23.
        $Mail.Attachments.Add($att) 
24.
25.
26.
  $SMTPClient.Send($Mail) 
27.
28.
 
29.
sendmail "edi@xxx.com" "xxx@hotmail.com" "test" "DER INHALT"
Grüße Uwe
Bitte warten ..
Mitglied: Tranministrator
11.09.2014 um 19:06 Uhr
Hey Uwe,

hab es jetzt getestet, leider noch immer eine Meldung, deutet darauf hin dass ich entweder ein Murks rein gemacht habe oder dass da etwas im Design nicht stimmt.

01.
Function sendmail($FROM,$TO,$SUBJECT,$BODY,$ATTACHMENTS = $null){ 
02.
  $SMTPHOST = "mail.gmx.net" 
03.
  $SMTPPORT = "587" 
04.
  $SMTPUSER = "Nummer" 
05.
  $SMTPClient = New-object System.Net.Mail.SmtpClient($SMTPHOST,$SMTPPORT) 
06.
  $SMTPClient.EnableSsl = $true 
07.
  $Mail = new-object System.Net.Mail.MailMessage 
08.
  $Mail.from = $FROM  
09.
  $Mail.to.add($TO) 
10.
  $SMTPSECUREPASS = get-content "V:\XXX\Batch\Mail\passwort_gmx.txt" | convertto-securestring -key (1..16) 
11.
  $SMTPClient.Credentials = new-object System.Net.NetworkCredential($SMTPUSER,$SMTPSECUREPASS)  
12.
  $Mail.Subject = $SUBJECT 
13.
  $Mail.Body = $BODY 
14.
  # Add Attachments 
15.
  if ($ATTACHMENTS){ 
16.
      foreach ($att in $ATTACHMENTS){ 
17.
        $Mail.Attachments.Add($att.FullName) 
18.
19.
20.
  $SMTPClient.Send($Mail) 
21.
22.
 
23.
sendmail "XXX@gmx.at" "XXX@hotmail.com" "test" "DER INHALT"



Passwort wurde so erzeugt:

01.
 
02.
$secure = read-host -assecurestring  
03.
 
04.
$encrypted = convertfrom-securestring -secureString $secure -key (1..16)  
05.
 
06.
#Pfad zur Passwort Datei 
07.
$encrypted | set-content V:\XXX\Batch\Mail\passwort_gmx.txt 
08.
 

Fehlermeldung:

01.
 
02.
PS V:\XXX\Batch\Mail> V:\XXX\Batch\Mail\neu_ps2.ps1 
03.
Ausnahme beim Aufrufen von "Send" mit 1 Argument(en):  "Für den SMTP-Server ist eine sichere Verbindung erforderlich, oder der Client w 
04.
urde nicht authentifiziert. Die Serverantwort war: Authentication required" 
05.
Bei V:\XXX\Batch\Mail\neu_ps2.ps1:20 Zeichen:19 
06.
+   $SMTPClient.Send <<<< ($Mail) 
07.
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException 
08.
    + FullyQualifiedErrorId : DotNetMethodException 
09.
  
10.
 
11.
____________________________________________________________________________________________________________________________________
Hast du noch eine Idee? Das ist mal jetzt ein GMX Account den ich ausgegraben habe um den anderen SMTP zu entlasten


Viele Grüße

Robert
Bitte warten ..
Mitglied: Tranministrator
11.09.2014 um 19:31 Uhr
Hey Uwe,

eine Glanzleistung, läuft Bombe

Jetzt fehlen nur mehr die Anhänge, BCC + CC habe ich gerade positiv getestet.

Hast du ein Tipp für mich wo die Pfade eingetragen werden?

Viele Grüße

Robert
Bitte warten ..
Mitglied: colinardo
11.09.2014, aktualisiert um 19:47 Uhr
Du kannst die Anhänge einfach als String-Array hinter das Body Argument anhängen. Das hatte ich ja schon mit eingebaut.
01.
sendmail "XXX@gmx.at" "XXX@hotmail.com" "test" "DER INHALT" @("c:\doc1.xlsx","c:\doc2.xlsx")
Grüße Uwe

Äh Moment dann noch die Zeile 23 so ändern (Ich hatte die Funktion damals für was anderes verwendet sorry)
01.
$Mail.Attachments.Add($att) 
Bitte warten ..
Mitglied: Tranministrator
11.09.2014 um 19:49 Uhr
Genau das habe ich auch gemacht.


Habe es mal so:

01.
($FROM,$TO,$SUBJECT,$BODY,$ATTACHMENTS = $null) 
02.
 
03.
@("V:\test\test.txt") 
04.
 
Und so probiert:

01.
($FROM,$TO,$SUBJECT,$BODY,$ATTACHMENTS ) 
02.
 
03.
@("V:\test\test.txt") 
04.
 
Fehlermeldung war immer diese:

01.
Ausnahme beim Aufrufen von "Add" mit 1 Argument(en):  "Der Wert darf nicht NULL sein. 
02.
Parametername: item" 
03.
Bei V:\sven\Batch\Mail\neu_ps2_work.ps1:22 Zeichen:30 
04.
+         $Mail.Attachments.Add <<<< ($att.FullName) 
05.
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException 
06.
    + FullyQualifiedErrorId : DotNetMethodException 
07.
 
Als Array meinst du auch sicher *.* oder *.txt oder?

Viele Grüße

Robert
Bitte warten ..
Mitglied: Tranministrator
11.09.2014 um 19:52 Uhr
Hey Uwe,

passt gut, jetzt kann man mehrere Dateinamen angeben.

Gibt es da auch etwas einfaches für *.* oder *.log Dateien? Also alle Dateien eines Ordners?

Viele Grüße

Robert
Bitte warten ..
Mitglied: colinardo
LÖSUNG 11.09.2014, aktualisiert um 20:05 Uhr
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
Und zwar änderst du dann Zeile 23 wieder so ab
01.
$Mail.Attachments.Add($att.FullName)
Dann erstellst du dir ein Objekt mit den Files (aber bitte außerhalb der Funktion )
01.
$files = dir "c:\temp\*.log"
Welches du dann an den Funktionsaufruf als Parameter übergibst
01.
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
Bitte warten ..
Mitglied: Tranministrator
11.09.2014 um 20:08 Uhr
Hey Uwe,


vielen Dank für deinen Einsatz! Bist spitze

Viele Grüße und ebenso einen schönen Abend!

Robert
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
PowerShell Skript für doppelte Dateinamen
gelöst Frage von janelsaesserBatch & Shell1 Kommentar

Hallo zusammen, ich habe einen Oder (01_XY) in dem ganz viele Bilder von Personen liegen. Diese Bilder haben als ...

Batch & Shell
Powershell Skript fehlerhaft?
Frage von SpeakerSTBatch & Shell3 Kommentare

Hallo, ich habe mir ein Powershell Skript geschriebe was bisher auch immer funktioniert hat aber unter einem Windows Server ...

Batch & Shell
Powershell + Batch Skript kombiniert
gelöst Frage von mschaedler1982Batch & Shell11 Kommentare

Hallo zusammen. Ich habe hier zwei Skripte (Powershell + Batch Skript) Die Batch Datei: (Zu dieser Datei muss ich ...

Batch & Shell
Powershell Skripten, Netzwerk auslesen
gelöst Frage von CaramianBatch & Shell5 Kommentare

Guten Tag Ich sollte ein Powershellskript erstellen, dass alle Netzwerkinformationen wie z.B. IP Adresse, Mac Adresse, Computername usw. und ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 12 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 16 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware10 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...