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
}