taubetecinc
Goto Top

Email mit Anhang über Powershell?

Ich hätte da mal eine frage.... unzwar wie man eine email mit powershell und mit anhang versendet. weiß bis jetzt bloß wie ich email ohne anhang versende
$EmailFrom = "email@server.com"  
$EmailTo = "email@gmail.com"  
$Subject = "Test Subject"  
$Body = "Test Body"  
$SMTPServer = "smtp.gmail.com"  
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("email@gmail.com", "Password");  
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
jetzt ist für mich da noch die frage wie ich noch eine Datei bzw ein Ordner hinzufügen kann.....
habe auch schon länger gesucht aber nichts davon hat funktioniert......

LG TaubeTecInc

Content-ID: 360931

Url: https://administrator.de/contentid/360931

Ausgedruckt am: 25.11.2024 um 00:11 Uhr

emeriks
emeriks 12.01.2018 um 16:08:53 Uhr
Goto Top
Hi,
Google kaputt?
Erster Treffer:
Send an email with an attachment using PowerShell

E.
colinardo
Lösung colinardo 12.01.2018, aktualisiert am 12.05.2020 um 09:01:14 Uhr
Goto Top
Servus.
Function sendmail($FROM,$TO,$SUBJECT,$BODY,[System.IO.FileInfo[]]$ATTACHMENTS = $null){
  $SMTPHOST = "smtp.server.de"  
  $SMTPPORT = 587
  $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.FullName)
      }
  }
  $SMTPClient.Send($Mail)
  $smtpclient.Dispose()
  $mail.Dispose()
}

sendmail "from@domain.de" "to@domain.tld" "DEIN BETREFF" "DER INHALT" (gci 'D:\Ordner\*.txt')  
Alternative dazu schau dir Send-MailMessage an.
Beispiel:
Send-MailMessage -From "user@domain.de" -to "empfaenger@domain.de" -Subject "Dienst läuft nicht" -SmtpServer smtp.domain.de -Credential (New-Object PSCredential("USERNAME",(ConvertTo-SecureString 'PASSWORD' -AsPlainText -Force))) -UseSSL -Attachments "C:\datei1.txt","C:\datei2.txt"  
Gibts hier im Forum schon unendlich vieeeeeele Beispiele face-wink.

Grüße Uwe
TaubeTecInc
TaubeTecInc 12.01.2018 um 17:06:10 Uhr
Goto Top
Da gibt es wieder ein Problem, der zeigt wieder kann das was nicht umkonvertiert weden kann, geht also wieder nicht......
sendmail
Die Argumenttransformation für den Parameter "ATTACHMENTS" kann nicht verarbeitet werden. Der Wert "System.Object" vom Typ "System.Object" kann nicht in den Typ "System.IO.FileInfo" konvertiert werden.



Aber dennoch danke für den versuch
colinardo
colinardo 12.01.2018 aktualisiert um 17:11:14 Uhr
Goto Top
Da gibt es wieder ein Problem, der zeigt wieder kann das was nicht umkonvertiert weden kann, geht also wieder nicht......
Sorry war nur ein Tippfehler ... ist oben korrigiert. Kann doch mal passieren!
Aber dennoch danke für den versuch
Versuch face-big-smile?, der war gut!
TaubeTecInc
TaubeTecInc 12.01.2018 um 17:18:06 Uhr
Goto Top
und weitere Probleme.

: Ausnahme beim Aufrufen von "Send" mit 1 Argument(en): "Für den SMTP-Server ist eine sichere Verbindung erforderlich, oder der Client wurde nicht authentifiziert. Die Serverantwort war: 5.5.1 Authentication Required. Learn more

habe aber emailadresse und Password korrekt eingefügt, wo ist nun das Problem. Schuldige fals ich dich damit etwas nerve
colinardo
colinardo 12.01.2018 aktualisiert um 17:20:07 Uhr
Goto Top
Falscher Port?!. Welcher Anbieter?
TaubeTecInc
TaubeTecInc 12.01.2018 aktualisiert um 17:23:11 Uhr
Goto Top
Google.... also 587 ist richtig
colinardo
colinardo 12.01.2018 aktualisiert um 17:26:05 Uhr
Goto Top
SMTP für unsichere Clients hast du bei Google in den Einstellungen freigeschaltet? Das ist Voraussetzung sonst geht das nicht!
Geht hier einwandfrei ebenfalls mit Send-MailMessage ...
Send-MailMessage -From "user@gmail.com" -to 'empfaenger@domain.de' -Subject "Betreff" -Body 'Musterbody' -SmtpServer 'smtp.gmail.com' -Credential (New-Object PSCredential('user@gmail.com',(ConvertTo-SecureString 'PASSWORD' -AsPlainText -Force))) -UseSSL -Port 587 -Attachments "C:\datei.txt"  
TaubeTecInc
TaubeTecInc 12.01.2018 um 17:27:30 Uhr
Goto Top
ja habe es ausprobier, nun geht das erstmal...... ABER.....
Send-MailMessage
Speicherzuordnung überschritten. Die Serverantwort war: 5.7.0 This message was blocked because its content presents a potential



die Datei ist 3kb groß...... also eigendlich ja nichts.....
colinardo
colinardo 12.01.2018 um 17:27:30 Uhr
Goto Top
colinardo
colinardo 12.01.2018 aktualisiert um 17:30:12 Uhr
Goto Top
Zitat von @TaubeTecInc:

ja habe es ausprobier, nun geht das erstmal...... ABER.....
Send-MailMessage
Speicherzuordnung überschritten. Die Serverantwort war: 5.7.0 This message was blocked because its content presents a potential


die Datei ist 3kb groß...... also eigendlich ja nichts.....
Das hat nichts mit der Größe und auch nichts mit der Powershell zu tun, Google blockt bestimmte potentiell gefährliche Attachments by default und blockt den Versand dann.
https://support.google.com/mail/answer/6590?hl=de
TaubeTecInc
TaubeTecInc 12.01.2018 um 17:30:01 Uhr
Goto Top
dann scheinen cmd Dateien nicht zu gehen...... mal gucken ob es mit einem ordner klappt
colinardo
colinardo 12.01.2018 aktualisiert um 17:31:59 Uhr
Goto Top
Zitat von @TaubeTecInc:

dann scheinen cmd Dateien nicht zu gehen...... mal gucken ob es mit einem ordner klappt
Musst du dann zippen, das ist normal. E-Mail Clients blocken diese Anhänge ja sowieso meist zusätzlich per Default.
In Gmail blockierte Dateitypen
Nicht anhängbare Dateitypen

ADE, ADP, BAT, CHM, CMD, COM, CPL, EXE, HTA, INS, ISP, JAR, JS (NEU), JSE, LIB, LNK, MDE, MSC, MSI, MSP, MST, NSH, PIF, SCR, SCT, SHB, SYS, VB, VBE, VBS, VXD, WSC, WSF, WSH
TaubeTecInc
TaubeTecInc 12.01.2018 aktualisiert um 17:38:48 Uhr
Goto Top
ok danke, dann muss ich das halt als rar oder zip Datei machen, aber trotzdem danke dir.....
colinardo
colinardo 12.01.2018 aktualisiert um 17:50:36 Uhr
Goto Top
Zitat von @TaubeTecInc:

ok danke, dann muss ich das halt als rar oder zip Datei machen, aber trotzdem danke dir.....
Falls du es brauchen kannst ...
Compress-Archive
oder bei älteren Powershell-Versionen die Klasse System.IO.Compression.FileSystem nutzen:
Mit Powershell eine Datei zippen und verschlüsseln
emeriks
emeriks 12.01.2018 um 19:12:28 Uhr
Goto Top
Versuch ?, der war gut!
Ja, ja. Der Uwe braucht meistens etwas länger ... face-smile
colinardo
colinardo 12.01.2018 aktualisiert um 23:01:19 Uhr
Goto Top
Zitat von @emeriks:

Versuch ?, der war gut!
Ja, ja. Der Uwe braucht meistens etwas länger ... face-smile
Joa das sacht ming Frau auch immer jeden Abend, da fängt man gerade an sich aufzuwärmen da ist die immer schon fertig .... face-smile
q166132
q166132 12.05.2020 um 08:28:05 Uhr
Goto Top
Hallo Uwe,

das funktioniert sehr gut, vielen Dank.

Ich habe das Problem, wenn ich die Datei nach dem Verschicken löschen will kommt die Fehlermeldung:

remove-item : Das Element C:\test\helpling.zip kann nicht entfernt werden: Der Prozess kann nicht auf die Datei
"C:\test\helpling.zip" zugreifen, da sie von einem anderen Prozess verwendet wird.  
In Zeile:4 Zeichen:1
+ remove-item helpling.zip
+ ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\test\helpling.zip:FileInfo) [Remove-Item], IOException
    + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

Wie lässt die Funktion die Datei wieder los?

Danke Dir
Mike
colinardo
colinardo 12.05.2020 aktualisiert um 09:00:47 Uhr
Goto Top
Servus Mike.
Hatte ich damals vergessen einzufügen...
# ....
$smtpclient.Dispose()
$mail.Dispose()
[gc]::Collect()
am Ende der Funktion einfügen solltest du die obige nutzen. Das Garbage Collect kannst du auch weglassen wenn es bei dir ohne funktioniert. Ist nur in hartnäckigen Fällen nötig.

G. Uwe
q166132
q166132 12.05.2020 um 11:45:47 Uhr
Goto Top
Servus Uwe,

vielen Dank. Das hat wieder ganz gut funktioniert.

Darf ich Dich noch etwas fragen?

Ich habe Dateien in einem Verzeichnis und wollte mit
dir | rename-item -newName helpling.zip ; sendmail ( xxx );  remove-item helpling.zip

Er läuft auch einmal durch, aber bei der nächsten Datei geht es nicht mehr.
Was mache ich hier falsch?
Ich dachte, mit dir kann eine die Dateien auslesen und dann werden die 3 Befehle abgearbeitet.

Danke Dir
Mike
colinardo
colinardo 12.05.2020 aktualisiert um 12:07:26 Uhr
Goto Top
Zitat von @q166132:
Ich habe Dateien in einem Verzeichnis und wollte mit
dir | rename-item -newName helpling.zip ; sendmail ( xxx );  remove-item helpling.zip

Er läuft auch einmal durch, aber bei der nächsten Datei geht es nicht mehr.
Was mache ich hier falsch?
Ich dachte, mit dir kann eine die Dateien auslesen und dann werden die 3 Befehle abgearbeitet.
Nein das geht mit obiger Funktion so nicht da sie nicht auf Pipeline-Arbeiten ausgelegt ist (kann man anpassenwenn man will mache ich jetzt aber nicht, gibt ja bessere Alternativen wie Send-MailMessage (s.o.). Außerdem ist ein simples "dir" sehr fehlerträchtig das damit auch Ordner inkludiert werden, und noch diverse andere schwere Fehler wie mehrfaches umbenennen mehrerer Dateien in ein und den selben Namen. Das was du vermutlich meinst geht so

dir -File -Filter *.zip | %{
    sendmail ...................... -Attachments $_
    $_ | remove-item -Force
}

p.s. Bitte den Thread hier nicht übernehmen, wenn weitere Fragen sind bitte PN oder neuen Thread. Danke!