Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 2023 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Powershell CHAT Skript (5)

Frage von xpxy15 zum Thema Batch & Shell ...

Batch & Shell
gelöst PowerShell Ordnergröße Skript ignoriert versteckte Dateien (3)

Frage von Giffas zum Thema Batch & Shell ...

Batch & Shell
Powershell Universelles Skript zum Ordnerberechtigungen ändern (3)

Frage von pixel0815 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...