Powershell email senden mit passwort hinterlegen

*MovieStar*

Banned
Registriert
Okt. 2018
Beiträge
53
Hallo leute

ich versuche gerade eine Email über powershell zu senden.
leider funktioniert es nicht.
Und ausserdem würde ich gerne wollen, das ich das passwort und den User gleich im Skript hinterlegen kann.
Mit Get-Credential aber wie bette ich das ein?

mein Code sieht momentan so aus: der server ist online exchange

Send-MailMessage -From "test@test.test" -To "test2@test2.test2" -Subject "Genau" -Body "Es funktioniert" -SmtpServer smtp.office365.com
 
  • Gefällt mir
Reaktionen: BFF
ich zitiere:
"Aus diesem Grund muss man das erforderliche PSCredential-Objekt vor dem Versand einer Mail erzeugen, indem man dafür einen Benutzernamen angibt und das Passwort aus einer Datei einliest, in der man es zuvor verschlüsselt gespeichert hat. Letzteres lässt sich auf folgende Weise bewerkstelligen:
(Get-Credential).password | ConvertFrom-SecureString > MailPW.txt"

Wie darf ich das verstehen? .txt datei verschlüsseln?
Wen die Datei verschlüsselt ist kann ja ps auch nicht darauf zugreifen
 
Du erzeugst zu erst die MailPW.txt mit einem seperaten Script, in deinem Script zum senden muss das nicht rein.
Hier reicht dann der verweis auf die MailPW.txt. Diese darfst du natürlich dann nicht mehr verändern, sollte sich was ändern erzeugst du mit dem 1. Script einfach eine Neue.

1. Teil
PowerShell:
(Get-Credential).password | ConvertFrom-SecureString > "c:\MailPW.txt"

2.Teil
PowerShell:
$PSEmailServer = "MAILSERVER" #Postausgangsserver (smtp)
$pw = Get-Content ("c:\MailPW.txt") | ConvertTo-SecureString # holt sich das Passwort aus der verschlüsselten Datei und speichert es als securestring, ist erforderlich
$cred = New-Object System.Management.Automation.PSCredential "MailUser", $pw # PSCredential-Objekt vor dem Mail-Versand erzeugen
Send-MailMessage -Credential $cred -to "EMPFÄNGER" -from "ABSENDER" -Subject "BETREFF" -body "TEXT" -encoding ([System.Text.Encoding]::UTF8)
So könnte es aussehen.
 
Zuletzt bearbeitet:
Ich habs nun so:
Code:
$smtpCred = (Get-Credential).Password | ConvertFrom-SecureString > "C:\ordner\hallo.txt"
$ToAddress = 'Nach'
$FromAddress = 'VON'
$SmtpServer = 'smtp.office365.com'
$SmtpPort = '587'

$mailparam = @{
    To = $ToAddress
    From = $FromAddress
    Subject = 'Titel'
    Body = 'Hallo'
    SmtpServer = $SmtpServer
    Port = $SmtpPort
    Credential = $smtpCred
    }

Send-MailMessage @mailparam -UseSsl

Er fragt mich immer noch nach dem loggin... was mache ich falsch?
 
Hmmm...
wieso mache ich das mehrmals?

wie kann ich bei mir die Datei übergeben?

dein Skript funktioniert irgendwie nicht ganz.
Er fragt 2 mal nach dem passwort und macht dan nichts :D

Ach das meinst du mit datei anlegen.
kann ich nicht die Datei eigenhändig anlegen und nur noch einlesen?
 
:confused_alt:Also ich habe 2 Scripte.
das Erste ist Teil 1 von oben, damit legst du einmalig die PW Datei an, die enthält deine Authentifizierung (Benutzername und PW) was du dann mit dem 2. Script verwendest. Wenn die PW Datei einmal erzeugt wurde reicht das in der Regel.

*MovieStar* schrieb:
kann ich nicht die Datei eigenhändig anlegen und nur noch einlesen?
Nein
Die in anderen Umgebungen praktizierte unsichere Methode, Passwörter an Send-MailMessage im Klartext zu übergeben, lässt PowerShell nicht zu.
deswegen
Andererseits ist es aber auch nicht möglich, PSCredential-Objekte komplett in einer Datei zu speichern, um sie von dort bei Bedarf einzulesen. Aus diesem Grund muss man das erforderliche PSCredential-Objekt vor dem Versand einer Mail erzeugen, indem man dafür einen Benutzernamen angibt und das Passwort aus einer Datei einliest, in der man es zuvor verschlüsselt gespeichert hat. Letzteres lässt sich auf folgende Weise bewerkstelligen:
Steht aber auch alles so in meinem Link den ich gepostet habe.
 
ok habs begriffen kriege aber einen fehler
Send-MailMessage : Für den SMTP-Server ist eine sichere Verbindung erforderlich, oder der Client wurde nicht authentifiziert. Die Serverantwort war: 5.7.57 SMTP; Client was not
authenticated to send anonymous mail during MAIL FROM [VI1PR09CA0079.eurprd09.prod.outlook.com]
 
Hat alles funktioniert
noch kleine Frage

Ist es möglich eine Mail ohne Konto zu senden?
Ich hab mal gesehen das es über C++ funktioniert
geht das auch per PS?
 
ja unbekannt ich kann ihn ja dann im exchange frei geben
es landet ja höchstens im spam oder?!
 
*MovieStar* schrieb:
ja unbekannt ich kann ihn ja dann im exchange frei geben
es landet ja höchstens im spam oder?!

Ohne Exchange-Mailbox (/Postfach; das ist das, das du wohl meinst) zu senden ist möglich.
Dazu gibt u.a. den "Anonymous-Login" (kann man aber auch ändern).
Solche Sendungen müssen aber explizit im Exchange für den jeweiligen IP-Bereich freigeben sein (alles andere wäre die Spam-Schleuder schlechthin).

Sollte es Probleme geben, obwohl der freigegeben wurde, probiers mit "anonymous" als Username + Passwort als PSCredential.
PowerShell:
new-object System.Management.Automation.PSCredentials("anonymous" ,"anonymous")
 
Zurück
Oben