Emails auf einem Windows Server 2012 abrufen und PDF Anhänge automatisch speichern
Hallo,
ich suche eine gute Lösung für eingehende Faxe!
Faxe werden bereits digital als Emailanhang im PDF Format zu einer Email Adresse geschickt. Ich möchte diese Email Adresse auf einem Windows Server 2012 abrufen und die PDF anhänge automatisch in einen Ordner "FAX" speichern, da das jeder Client im Netzwerk auf diese Anhänge zugreifen kann.
Das ganze habe ich Testweise mit Thunderbird realisiert. Da dieses aber kein Dienst ist, bzw nach einem Serverneustart nicht startet ( ohne das ich mich anmelde ) ist es logischerweise nur eine NOT Lösung.
Vielleicht hat jemand eine gute Idee, wie man sowas umsetzten kann.
Danke im vorraus
ich suche eine gute Lösung für eingehende Faxe!
Faxe werden bereits digital als Emailanhang im PDF Format zu einer Email Adresse geschickt. Ich möchte diese Email Adresse auf einem Windows Server 2012 abrufen und die PDF anhänge automatisch in einen Ordner "FAX" speichern, da das jeder Client im Netzwerk auf diese Anhänge zugreifen kann.
Das ganze habe ich Testweise mit Thunderbird realisiert. Da dieses aber kein Dienst ist, bzw nach einem Serverneustart nicht startet ( ohne das ich mich anmelde ) ist es logischerweise nur eine NOT Lösung.
Vielleicht hat jemand eine gute Idee, wie man sowas umsetzten kann.
Danke im vorraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 334040
Url: https://administrator.de/contentid/334040
Ausgedruckt am: 24.11.2024 um 22:11 Uhr
3 Kommentare
Neuester Kommentar
Servus,
ach da gibts so viele Möglichkeiten
Hier mal zwei davon, welche sich alle per Aufgabenplanung realisieren lassen:
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
ach da gibts so viele Möglichkeiten
Hier mal zwei davon, welche sich alle per Aufgabenplanung realisieren lassen:
- Die erste hatte ich hier schon mal gespostet und ist für IMAP Konten
- Die Zweite wenn ein Exchange-Server im Einsatz ist mal schnell Quick n' Dirty als EWS gescriptet, welches sich periodisch aufrufen lässt:
<#
Extrahiert alle PDF Attachments aus den Mails der Inbox einer beliebigen Mailbox ins Dateisystem und verschiebt die Mail anschließend in einen Archivordner in der Mailbox / (c) @colinardo
Vor dem Start des Skript ist dem User welcher das Skript später ausführt die Impersonation-Berechtigungzu erteilen:
In diesem Beispiel der User 'Administrator' (Bitte einmalig in einer EMS ausführen)
New-ManagementRoleAssignment -Name:impersonationAssignmentName -Role:ApplicationImpersonation -User:Administrator
#>
# Start Variablen -------------------------------------------------------------------------
$exserver = "server.domain.tld"
# Name des Ordners in dem die Kontake angelegt werden
$mailbox = "fax@domain.tld"
# Name des Ablageordners der Mailbox (Unterordner des Posteingangs)
$mailboxarchive = "Archiv"
# Dateipfad zur Ablage der PDFs
$ablage = "D:\attachments"
# Ende Variablen -------------------------------------------------------------------------
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}
# Active Directory Modul laden
Import-Module ActiveDirectory
# EWS DLL laden
Add-Type -Path "$(Split-Path $MyInvocation.MyCommand.Definition -Parent)\Microsoft.Exchange.WebServices.dll"
# Allen Zertifikaten vertrauen
Add-Type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
# Trust all certs policy dem ServicePointManager zuweisen
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
# EWS Objekt erstellen
$ews = new-object Microsoft.Exchange.WebServices.Data.ExchangeService
$ews.Url = "https://$exserver/ews/exchange.asmx"
# Benutze die Credentials mit dem das Skript ausgeführt wird
$ews.UseDefaultCredentials = $true
$ews.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, [string]$mailbox)
# Finde Mailbox Archivordner --------------
$view = New-Object Microsoft.Exchange.WebServices.Data.FolderView(1)
$view.PropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::IdOnly,[Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName)
$view.Traversal = [Microsoft.Exchange.WebServices.Data.FolderTraversal]::Shallow
$filter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName,$mailboxarchive)
$result = $ews.FindFolders([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$filter,$view)
if ($result.TotalCount){
# Ordner wurde gefunden
$targetFolder = $result.Folders
}else{
# Mailbox Archiv-Ordner existiert noch nicht, lege ihn an
write-host "Creating folder '$foldername' in Mailbox." -ForegroundColor Green
try{
$targetFolder = New-Object Microsoft.Exchange.WebServices.Data.Folder($ews)
$targetFolder.DisplayName = $mailboxarchive
$targetFolder.Save([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)
}catch{
Write-Host $_ -F Red
return
}
}
# -----------------------------
$view = New-Object Microsoft.Exchange.WebServices.Data.ItemView(10000)
$view.PropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
$result = $ews.FindItems([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$view)
$result.Items | ?{$_.HasAttachments} | %{
$mail = $_
$mail.Load()
$mail.Attachments | ?{[IO.Path]::GetExtension($_.Name) -eq '.pdf' -and !$_.IsInline} | %{
# Dateiname zusammensetzen, Format: <ReceivedTime: yyyyMMdd_HHmmss>_<FILENAME>_<DATETIME TICKS>.pdf
$getnewfilepath = {$ablage + "\" + ($mail.DateTimeReceived.toString('yyyyMMdd_HHmmss')) + "_" + [IO.Path]::GetFileNameWithoutExtension($_.Name) + "_" + (get-date).Ticks + [IO.Path]::GetExtension($_.Name)}
$filepath = . $getnewfilepath
# Prüfen ob Dateiname schon existiert, wenn ja generiere so lange einen neuen Namen bis einer frei ist
while((Test-Path $filepath)){. $filepath = $getnewfilepath}
write-host "Speichere Attachment mit dem Namen '$($_.Name)' nach '$filepath'." -F Green
$_.Load($filepath)
# Mail gelesen markieren
$mail.IsRead = $true
$mail.Update([Microsoft.Exchange.WebServices.Data.ConflictResolutionMode]::AutoResolve) | out-null
# Mail ins Archiv verschieben
$mail.move($targetFolder.id) | out-null
}
}
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate