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