Zur Spam-Bekämpfung ist es von großem Vorteil, wenn die erste Instanz der MailRoute alle gültigen eMailadressen kennt.

Bei mir ist das ein PostFix welches auf einem Ubuntu-Server läuft.

Folgendes Script wird nun zyklisch per Task-Scheduler auf dem Exchange-Server aufgerufen. Es erstellt ein Text-File und legt dies in „wwwroot“ ab.

Auf dem Linux-Server läuft ein Cron-Job der das File vom Exchange läd, mit dem vorhergehenden vergleicht und PostFix, wenn nötig, durchstartet.

#--------------------------------------------------------------------------------------------------
#
# Skript zum exportieren der aktuell gültigen eMail-Adressen für die SMTP1 (vormals SV10)
# Autor Robert R. 25.01.2012
#--------------------------------------------------------------------------------------------------
# Historie:
# 11.12.2012	Robert R. Accepted-Domains und CustomAttribute6 zum Filtern verwenden
#
#--------------------------------------------------------------------------------------------------
# Variablen und Parameter
#--------------------------------------------------------------------------------------------------

param
	(
	[string]$MailTo = "admin@powershell.local",
	[string]$MailFrom = "admin@powershell.local",
	[string]$File = "C:\inetpub\wwwroot\email.txt",
	[switch]$Sendmail,
	[switch]$Debug,
	[switch]$NoOut
	)

#$NoMailGroup = "MAIL_ALL_NoExternalMails"
$NoMailToAlias = "team-group","root","extest_7133eae530fc4"
$UnwantedDomains = "powershell.local"

#--------------------------------------------------------------------------------------------------
# Module und Pugins
#--------------------------------------------------------------------------------------------------

	$a = (Get-PSSnapin | where {$_.Name -ilike "Microsoft.Exchange.Management.*"} | measure).Count
if ( $a -eq 0 )
	{
	if ( $Debug ) {write-host "Exchange-Plugin loading..."}
	Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
	}
Import-Module activedirectory

#--------------------------------------------------------------------------------------------------

Set-ADServerSettings -ViewEntireForest $true

# Akzeptierte Domänen in Array kopieren
if ( $DEBUG ) { write-host "Get Accepted Domains" }
$DOMAINs = @()
Get-AcceptedDomain | select DomainName | foreach { $DOMAINs += $_.DomainName.SmtpDomain.tostring() }

# Alle Recipients einsammeln 
if ( $DEBUG ) { write-host "Get Recipients" }
$RCPs = Get-Recipient -resultsize unlimited | select Alias, RecipientTypeDetails, EmailAddresses, GUID, CustomAttribute6

# GUID der Mitglieder aus der Gruppe <$NoMailGroup> in ein Array speichern um diese später zu filtern
#if ( $DEBUG ) { write-host "Get NoMailGroup" }
#$NoMail = @()
#Get-ADGroupMember $NoMailGroup -Recursive | foreach { $NoMail += $_.objectGUID.tostring() }

# Filter-Array umwandeln in Kleinbuchstaben. $attachment wird als temp-Variable verwendet
$attachment = @()
$NoMailToAlias | foreach { $attachment += $_.tolower() }
$NoMailToAlias = $attachment

# Alle eMailadressen werden in dem Array $attachment gespeichert
if ( $DEBUG ) { write-host "Filter List of Recipients" }
$attachment = @()
foreach ( $RCP in $RCPs )
	{
#	Ausfiltern von eMailadressen die nicht extern errichbar sein sollen
	if ( $RCP.RecipientTypeDetails.tostring().tolower() -eq "discoverymailbox" )	{ continue }
	if ( $NoMailToAlias -contains $RCP.Alias.tolower() )							{ continue }
	if ( $RCP.Alias -like "publicfolder*" )											{ continue }
	if ( $RCP.Alias -like "acl_mbx_*" )												{ continue }
#	if ( $NoMail -contains $RCP.GUID )												{ continue }
#	if ( $RCP.Alias.tolower() -eq "MAIL_ALL_NoExternalMails" )						{ continue }
#	if ( $RCP.CustomAttribute6 -ne "" )												{ continue }
	
	
	# eMailadressen des Emängers in die Liste schreiben
	foreach ( $email in $RCP.EmailAddresses )
		{
		$emaildomain = $email.ProxyAddressString.tolower().split("@")[1]
		if ( $email.Prefix -ilike "SMTP" -and $DOMAINs -contains $emaildomain -and
			-not ($UnwantedDomains -contains $emaildomain) )
			{
			if ( $DEBUG ) { Write-Host -NoNewline "." }
			$attachment += $email.SmtpAddress.tolower() + "`tx"
			#$attachment += $email.ProxyAddressString
			}
		elseif ( $DEBUG -and $email.Prefix -ilike "SMTP" ) { Write-Host -NoNewline "!" }
		}
	}

Write-Host ""

if ( -not $Debug )
	{
	remove-item $File
	$attachment | Sort-Object | out-file $File -Encoding ASCII
	}
	

if ( $Sendmail -and -not $Debug)
	{
	Send-MailMessage -To $MailTo -From $MailFrom -subject "email-smtp-adressen" -Body "das sind die emails smtp-adressen" -SmtpServer mailcas-c -Attachments $File
	}
elseif ( -not $NoOut )
	{
	$attachment | Sort-Object
	}

 

eMail-Adressen exportieren

Das könnte dir auch gefallen

Schreibe einen Kommentar