• SwissSign: geplante Downtime: Klick

  • Willkommen im neuen Forum.

    Solltet ihr "Social Media Login" im alten Forum genutzt haben, macht bitte ein Passwort Reset mit der damals benutzten E-Mail Adresse eures Social Media Kontos. Solltet das nicht funktionieren, dann schaut hier bitte rein: KLICK

  • NSP Forum als App inkl. Push Nachrichten (iOS): Klick

Github-Skript für Report abgelehnte Mails - Hilfe bei gewünschten Anpassungen?

mabu

Well-known member
Hallo.

Ich möchte das Skript ReporttoUserswithAllBlockedEmails einsetzen, aber erst einmal in der Art, dass zentral ein Admin die komplette Übersicht bekommt.

Mit Hilfe von Franks Tipps konnte ich zumindest schon so anpassen, dass die Mails nicht beim eigentlichen Empfänger, sondern bei mir landen. Das ist aber pro Empfängeradresse eine separate Mail.

Folgende Anpassungen bräuchte ich aktuell:

  1. in der Tabelle hinzufügen der Empfängermailadresse
  2. nicht eine Tabelle und Mail pro Empfänger, sondern alles in eine Tabelle und in eine Mail

Da muss bestimmt was mit dem "for each" angepasst werden. vermute so ab Zeile 40. Aber leider erschließt sich mir das nicht so richtig :-(

Und dann noch die Frage, ob man z.B. bei Ablehnung durch nicht validierbares Zertifikat dies auch als "Abweisungsgrund" erkennt. In meinem Test heute scheint es nur "SpamOrVirus" als Eintrag zu geben.

Danke.
 
Hallo Martin,
schick mir doch mal das was du hast und ich schau mal was ich auf die schnelle machen kann.

Grüße
 
Guten Morgen Martin,

ich habe mal eine quick & dirty Variante erstellt. Im ersten Test scheint mir das auch recht akzeptabel :)
Eine saubere Erweiterung der Report Skripte für "an den Admin" ist bei uns sogar schon angedacht, aktuell fehlt nur etwas die Zeit das ordentlich zu machen.
Für die Empfangsadresse des Admins gibt es nun einen Parameter.

Code:
Param
(
[Parameter(Mandatory=$true)][string] $SMTPHost,
[Parameter(Mandatory=$true)][string] $AdminAddress,
[Parameter(Mandatory=$false)][int] $NumberOfDaysToReport = 1,
[Parameter(Mandatory=$false)][string] $ReportSender = "NoSpamProxy Report Sender <nospamproxy@example.com>",
[Parameter(Mandatory=$false)][string] $ReportSubject = "Auswertung der abgewiesenen E-Mails an Sie",
# only needed for v14 with enabled provider mode
[Parameter(Mandatory=$false)][string] $TenantPrimaryDomain	
)

$nspVersion = (Get-ItemProperty -Path HKLM:\SOFTWARE\NoSpamProxy\Components -ErrorAction SilentlyContinue).'Intranet Role'
if ($nspVersion -gt '14.0') {
	try {
		Connect-Nsp -IgnoreServerCertificateErrors -ErrorAction Stop
	} catch {
		$e = $_
		Write-Warning "Not possible to connect with the NoSpamProxy. Please check the error message below."
		$e |Format-List * -Force
		EXIT
	}
	if ($(Get-NspIsProviderModeEnabled) -eq $true) {
		if ($null -eq $TenantPrimaryDomain -OR $TenantPrimaryDomain -eq "") {
			Write-Host "Please provide a TenantPrimaryDomain to run this script with NoSpamProxy v14 in provider mode."
			EXIT
		} else {
			# NSP v14 has a new authentication mechanism, Connect-Nsp is required to authenticate properly
			# -IgnoreServerCertificateErrors allows the usage of self-signed certificates
			Connect-Nsp -IgnoreServerCertificateErrors -PrimaryDomain $TenantPrimaryDomain
		}
	}
}

$dateStart = (Get-Date).AddDays(-$NumberOfDaysToReport)
$reportaddressesFileName = [System.IO.Path]::Combine($Env:TEMP, "reportaddresses.txt")

"Getting MessageTrackInformation.."
$messageTracks = Get-NSPMessageTrack -Status PermanentlyBlocked -From $dateStart -Directions FromExternal -WithAddresses
"Create Reportaddresses-File"

$entries = @{}
foreach ($messageTrack in $messageTracks){
	$addresses = $messageTrack.Addresses
	foreach ($addressEntry in $addresses){
		if ($addressEntry.AddressType -eq "Recipient"){
			$messageRecipient = $addressEntry.Address
			$list = $entries[$messageRecipient]
			if (!$list) {
				$list = @($messagetrack)
			}
			else
			{
				$list += $messageTrack
			}
			$entries[$messageRecipient] = $list
			}
	}
}
Set-Content $reportaddressesFileName $existingAddresses

"Generating and sending reports for the following e-mail addresses:"

# moved report logic out of loop
$reportFileName = $Env:TEMP + "\reject-analysis.html"

$htmlbody1 ="<html>
		<head>
			<title>Abgewiesene E-Mails an Sie</title>
			<style>
				table, td, th { border: 1px solid black; border-collapse: collapse; }
				#headerzeile         {background-color: #DDDDDD;}
			</style>
		</head>
	<body style=font-family:arial>
		<h1>Abgewiesene E-Mails an Sie</h1>
		<br>
		<table>
			<tr id=headerzeile>
				<td><h3>Uhrzeit</h3></td><td><h3>Empf&auml;nger</h3></td><td><h3>Absender</h3></td><td><h3>Betreff</h3></td>
			</tr>
			"

$htmlbody2 =""

# loop through all employees and loop through all senders
$entries.GetEnumerator() | ForEach-Object {

	$_.Name
	foreach ($validationItem in $_.Value) 
	{
		$NSPStartTime = $validationItem.Sent.LocalDateTime
		$addresses2 = $validationItem.Addresses
		$NSPSender = ($addresses2 | ? {$_.AddressType -eq "Sender"} | select "Address").Address		
        # add recipient 
		$NSPRecipient = ($addresses2 | ? {$_.AddressType -eq "Recipient"} | select "Address").Address		
		$NSPSubject = $validationItem.Subject
        # add recipient to output
		$htmlbody2 += "<tr><td width=150px>$NSPStartTime</td><td>$NSPRecipient</td><td>$NSPSender</td><td>$NSPSubject</td></tr>"
	}
}
$htmlbody3="</table>
	</body>
	</html>"
$htmlout=$htmlbody1+$htmlbody2+$htmlbody3

$htmlout | Out-File $reportFileName
Send-MailMessage -SmtpServer $SmtpHost -From $ReportSender -To $AdminAddress -Subject $ReportSubject -BodyAsHtml -Body "Im Anhang dieser E-Mail finden Sie den Bericht mit der Auswertung der abgewiesenen E-Mails aufgrund von Anh&auml;ngen an der E-Mail." -Attachments $reportFileName
Remove-Item $reportFileName
"Doing some cleanup...."
Remove-Item $reportaddressesFileName


Hoffe du hast einen guten Start in die Woche.

Gruß
Jan
 
Hallo Jan.

Danke für das Skript. Eben nach meinem Urlaub erst dazu gekommen, es mir anzusehen und zu testen.

Ich habe es eben noch um den Abweisungsgrund erweitert (zeigt zumindest Spam oder Policy im Test mit an).

Das werde ich nun mal per Scheduler laufen lassen. Letzte Tat für heute. Ist spät genug

Gruß,
Martin
 
Zurück
Oben