Alle Mails aus verzeichnis versenden, diese aber zu je 10 Mails senden und verschieben
Hallo,
ich würde gerne per PowerShell Mails versenden.
Dieses funktioniert soweit ganz gut mit einer Datei.
Ich habe in dem Verzeichnis aber x Dateien, diese können aber nicht in einer email ,
und sollen in Blöcke zu maximal 10 Stück versendet werden.
Leider weiß ich nicht, wie ich dieses machen soll.
Einen Teil des Auszuges aus dem Script $param ist die Datei / Verzeichnis aus welche zurückgegriffen wird.
Wie muss ich es erweitern, so dass im Vorfeld das Verzeichnis auf Anzahl geprüft wird, dann maximal 10 Mails an Anhang zusammen gefasst werden,
bei mehr als 10 eine weitere mail mit x , bis wieder 10 erreicht sind.
Diese sollen dann verschoben werden.
ich würde gerne per PowerShell Mails versenden.
Dieses funktioniert soweit ganz gut mit einer Datei.
Ich habe in dem Verzeichnis aber x Dateien, diese können aber nicht in einer email ,
und sollen in Blöcke zu maximal 10 Stück versendet werden.
Leider weiß ich nicht, wie ich dieses machen soll.
Einen Teil des Auszuges aus dem Script $param ist die Datei / Verzeichnis aus welche zurückgegriffen wird.
Wie muss ich es erweitern, so dass im Vorfeld das Verzeichnis auf Anzahl geprüft wird, dann maximal 10 Mails an Anhang zusammen gefasst werden,
bei mehr als 10 eine weitere mail mit x , bis wieder 10 erreicht sind.
Diese sollen dann verschoben werden.
# Teilbereich Email versenden
$param =$param.replace("-sOutputFile=","")
$ol = New-Object -comObject Outlook.Application
$mail = $ol.CreateItem(0)
$mail.Recipients.Add("xx@xx.de")
$mail.Subject "nötige Unterlagen " + $tifBaseName
$mail.Body = "Anbei zur weiteren Verwendung."
$mail.Attachments.Add($param)
$Mail.display()
#$Mail.send()
# email versenden ende
#$msg = "Wurde die Mail mit Anhang " +$dateiname_für_msgbo +" erstellt?"
[System.Windows.Forms.MessageBox]::Show($msg,"Prüfung",0)
#Datei verschieben
#Get-ChildItem $inputDir $pdf | Rename-Item -NewName {$_.Name -replace 'g','versendet_'}
Move-Item -Path $param -Destination $move_mail_item
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator tomolpi am 11.07.2020 um 22:51:04 Uhr
Formatierung des Quellcodes bearbeitet und Rechtschreibung/Grammatik der Frage leicht bearbeitet
Content-ID: 587026
Url: https://administrator.de/contentid/587026
Ausgedruckt am: 15.11.2024 um 03:11 Uhr
5 Kommentare
Neuester Kommentar
Moin,
Bin kein Powershell-Experte, daher such kein Code, aber eher ein logischer Ansatz:
Du schreibst, du hast Dateien in einem Verzeichnis. Dann baue eine Schleife drumherum:
Wenn alle Files verarbeitet wurden, liest du das Verzeichnis erneut ein. Ist es leer, bist du durch. Andernfalls geht es von vorn los
Gruß
em-pie
Bin kein Powershell-Experte, daher such kein Code, aber eher ein logischer Ansatz:
Du schreibst, du hast Dateien in einem Verzeichnis. Dann baue eine Schleife drumherum:
- Lies das Verzeichnis aus und schreibe die Files in ein Array.
- Für jedes Element wird die Mail versendet und verschiebst die erfolgreich versendete Mail.
- Nach 10 Elementen baust du eine Pause ein.
Wenn alle Files verarbeitet wurden, liest du das Verzeichnis erneut ein. Ist es leer, bist du durch. Andernfalls geht es von vorn los
Gruß
em-pie
Moin,
Das ist wohl eher die Datei, die angehängt wird.
Um das drumherum, was Du hast. $dir wäre dann das Verzeichnis, in dem die Dateien liegen:
Das schickt das Skript eine Minute nach jeder zehnten Mail schlafen. Wenn es länger oder kürzer sein soll, dann einfach die 60 in den gewünschten Wert ändern.
hth
Erik
Zitat von @thomas1972:
Einen Teil des Auszuges aus dem Script $param ist die Datei / Verzeichnis aus welche zurückgegriffen wird.
Einen Teil des Auszuges aus dem Script $param ist die Datei / Verzeichnis aus welche zurückgegriffen wird.
Das ist wohl eher die Datei, die angehängt wird.
Um das drumherum, was Du hast. $dir wäre dann das Verzeichnis, in dem die Dateien liegen:
$counter = 0
$params = get-childitem $dir -file # wenn rekursiv gesucht werden soll -recurse
foreach($param in $params) {
#hier das, was Du hast und funktioniert
$counter++
if($counter -eq 10) {
start-sleep -s 60
$counter = 0
}
}
Das schickt das Skript eine Minute nach jeder zehnten Mail schlafen. Wenn es länger oder kürzer sein soll, dann einfach die 60 in den gewünschten Wert ändern.
hth
Erik
Moin,
Gruß Thomas
# Ordner mit Anhängen
$Dir='C:\Test'
# Anhänge in jeweils 10 Dateien unterteilen
$Files = ls -File $Dir
For ($i=0;$i -lt $Files.Count;$i+=10) { $Each10 += ,($Files|select -skip $i -first 10) }
# Outlook öffnen
$OL=New-Object -ComObject Outlook.Application
# Mails mit jeweils 10 Dateien erstellen
$Each10 | % {$C=1} {
$Mail=$OL.CreateItem(0)
[void]$Mail.Recipients.Add("xx@xx.de")
$Mail.Subject="nötige Unterlagen $tifBaseName - Mail $C/$($Each10.Count)"
$Mail.Body = "Anbei zur weiteren Verwendung."
$_ | % {[void]$Mail.Attachments.Add($_.FullName)}
$Mail.Display()
# $Mail.send()
$C++
}
Gruß Thomas