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-Key: 360931

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

Printed on: April 25, 2024 at 11:04 o'clock

Member: emeriks
emeriks Jan 12, 2018 at 15:08:53 (UTC)
Goto Top
Hi,
Google kaputt?
Erster Treffer:
Send an email with an attachment using PowerShell

E.
Member: colinardo
Solution colinardo Jan 12, 2018, updated at May 12, 2020 at 07:01:14 (UTC)
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
Member: TaubeTecInc
TaubeTecInc Jan 12, 2018 at 16:06:10 (UTC)
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
Member: colinardo
colinardo Jan 12, 2018 updated at 16:11:14 (UTC)
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!
Member: TaubeTecInc
TaubeTecInc Jan 12, 2018 at 16:18:06 (UTC)
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
Member: colinardo
colinardo Jan 12, 2018 updated at 16:20:07 (UTC)
Goto Top
Falscher Port?!. Welcher Anbieter?
Member: TaubeTecInc
TaubeTecInc Jan 12, 2018 updated at 16:23:11 (UTC)
Goto Top
Google.... also 587 ist richtig
Member: colinardo
colinardo Jan 12, 2018 updated at 16:26:05 (UTC)
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"  
Member: TaubeTecInc
TaubeTecInc Jan 12, 2018 at 16:27:30 (UTC)
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.....
Member: colinardo
colinardo Jan 12, 2018 at 16:27:30 (UTC)
Goto Top
Member: colinardo
colinardo Jan 12, 2018 updated at 16:30:12 (UTC)
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
Member: TaubeTecInc
TaubeTecInc Jan 12, 2018 at 16:30:01 (UTC)
Goto Top
dann scheinen cmd Dateien nicht zu gehen...... mal gucken ob es mit einem ordner klappt
Member: colinardo
colinardo Jan 12, 2018 updated at 16:31:59 (UTC)
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
Member: TaubeTecInc
TaubeTecInc Jan 12, 2018 updated at 16:38:48 (UTC)
Goto Top
ok danke, dann muss ich das halt als rar oder zip Datei machen, aber trotzdem danke dir.....
Member: colinardo
colinardo Jan 12, 2018 updated at 16:50:36 (UTC)
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
Member: emeriks
emeriks Jan 12, 2018 at 18:12:28 (UTC)
Goto Top
Versuch ?, der war gut!
Ja, ja. Der Uwe braucht meistens etwas länger ... face-smile
Member: colinardo
colinardo Jan 12, 2018 updated at 22:01:19 (UTC)
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
Member: q166132
q166132 May 12, 2020 at 06:28:05 (UTC)
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
Member: colinardo
colinardo May 12, 2020 updated at 07:00:47 (UTC)
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
Member: q166132
q166132 May 12, 2020 at 09:45:47 (UTC)
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
Member: colinardo
colinardo May 12, 2020 updated at 10:07:26 (UTC)
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!