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

Mitglied: Tranministrator

Tranministrator (Level 1) - Jetzt verbinden

11.09.2014, aktualisiert 20:05 Uhr, 2597 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 + 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

Problem mit Powershell Backup-Skript

gelöst Frage von ahussainBatch & Shell2 Kommentare

Hallo allerseits, ich habe mir ein kleines Backup-Skript geschrieben, welches beim Einstecken eines USB Sticks dessen Inhalte auf die ...

Batch & Shell

Powershell Skript zur Aufgabenüberwachung

gelöst Frage von treshaBatch & Shell2 Kommentare

Hallo Leute, Ich versuche ein Skript zu schreiben, der eine bestimmte selbstgeschriebene Aufgabe überwacht und mir bei einer Störung ...

Neue Wissensbeiträge
Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 6 StundenWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

iOS
IOS 11.2.6 verfügbar
Information von sabines vor 12 StundeniOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 1 TagSicherheit8 Kommentare

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 TagInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Heiß diskutierte Inhalte
Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server24 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

LAN, WAN, Wireless
VPN Cisco ASA5505 PaloAlto PA-200
gelöst Frage von YannoschLAN, WAN, Wireless22 Kommentare

Hallo zusammen, ich würde gerne ein Site-to-Site VPN zwischen den beiden Standorten aufbauen. PaloAlto PA200 Internetanschluss Deutsche Telekom GK ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser15 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...