Suche nach Möglichkeit, Download-Link automatisch aus Mail auslesen zu können
Guten Morgen in die Runde,
ich grübele gerade über folgender Idee:
Über eine externe Webseite können die dort hinterlegten Daten per Button-Klick als csv-Datei angefordert werden.
Die csv-Datei wird auf Anbieterseite generiert, kurze Zeit später bekommt der User eine HTML-Mail mit einem Button à la "Hier csv herunterladen" zugeschickt. Der Link hinter dem Button enthält eine URL nach ungefähr dem folgenden Motto: https://export.srv123.contoso.com/MusterObjekt-yyyymmddhhmm-1234567890.c ...
Nun habe ich überlegt, ob man den Workflow (vor allem Mail öffnen, Link anklicken für den csv-Download) irgendwie mit Bordmitteln unter Windows mit einem installierten Microsoft Office 2016 (oder höher) automatisieren kann.
Aber so einen richtigen "Pack-An" habe ich noch nicht und die Rechercheergebnisse waren auch noch nicht so überzeugend.
Die erste Idee war, irgendwie die Mail automatisch als HTML-Datei speichern zu lassen, um die so erzeugte HTML-Datei anschließend von der Powershell zerflücken zu lassen, um die URL des Downloadlinks extrahieren zu können. Vielleicht gibt es aber auch eine andere Idee, ich bin da offen.
Ist das skizzierte Anliegen technisch mit Windows-Bordmitteln möglich bzw. hat vielleicht jemand schon einmal Erfahrungswerte in der Richtung sammeln können?
Vielen Dank vorab und einen guten Start in den Tag!
ich grübele gerade über folgender Idee:
Über eine externe Webseite können die dort hinterlegten Daten per Button-Klick als csv-Datei angefordert werden.
Die csv-Datei wird auf Anbieterseite generiert, kurze Zeit später bekommt der User eine HTML-Mail mit einem Button à la "Hier csv herunterladen" zugeschickt. Der Link hinter dem Button enthält eine URL nach ungefähr dem folgenden Motto: https://export.srv123.contoso.com/MusterObjekt-yyyymmddhhmm-1234567890.c ...
Nun habe ich überlegt, ob man den Workflow (vor allem Mail öffnen, Link anklicken für den csv-Download) irgendwie mit Bordmitteln unter Windows mit einem installierten Microsoft Office 2016 (oder höher) automatisieren kann.
Aber so einen richtigen "Pack-An" habe ich noch nicht und die Rechercheergebnisse waren auch noch nicht so überzeugend.
Die erste Idee war, irgendwie die Mail automatisch als HTML-Datei speichern zu lassen, um die so erzeugte HTML-Datei anschließend von der Powershell zerflücken zu lassen, um die URL des Downloadlinks extrahieren zu können. Vielleicht gibt es aber auch eine andere Idee, ich bin da offen.
Ist das skizzierte Anliegen technisch mit Windows-Bordmitteln möglich bzw. hat vielleicht jemand schon einmal Erfahrungswerte in der Richtung sammeln können?
Vielen Dank vorab und einen guten Start in den Tag!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7188139304
Url: https://administrator.de/contentid/7188139304
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo.
Ein Makro könnte das abfrühstücken:
Dadurch wird das Makro nach einem Link suchen, der mit der angegebenen URL übereinstimmt. Wenn ein entsprechender Link gefunden wird, wird der Internet Explorer geöffnet und der Link automatisch angeklickt.
Quelle: ChatGPT
ungetestet aber sieht recht schlüssig aus.
Gruß
Ein Makro könnte das abfrühstücken:
Option Explicit
' Erforderliche Verweise:
' - Microsoft Outlook xx.x Object Library
' - Microsoft Internet Controls
Private WithEvents InboxItems As Outlook.Items
Private Sub Application_Startup()
Dim OutlookApp As Outlook.Application
Dim OutlookNamespace As Outlook.NameSpace
Dim OutlookFolder As Outlook.MAPIFolder
Set OutlookApp = Outlook.Application
Set OutlookNamespace = OutlookApp.GetNamespace("MAPI")
Set OutlookFolder = OutlookNamespace.GetDefaultFolder(olFolderInbox)
Set InboxItems = OutlookFolder.Items
End Sub
Private Sub InboxItems_ItemAdd(ByVal Item As Object)
Dim Mail As Outlook.MailItem
Dim HTMLDoc As MSHTML.HTMLDocument
Dim Link As MSHTML.HTMLLinkElement
Dim IEApp As InternetExplorer
Dim TargetURL As String
If TypeOf Item Is Outlook.MailItem Then
Set Mail = Item
' Überprüfen, ob die E-Mail HTML-Format hat
If Mail.BodyFormat = olFormatHTML Then
Set HTMLDoc = New MSHTML.HTMLDocument
HTMLDoc.Body.innerHTML = Mail.HTMLBody
' Die spezielle URL mit Wildcard-Suche finden
TargetURL = "https://example.com/*" ' Beispiel-URL mit Wildcard
For Each Link In HTMLDoc.Links
If Link.href Like TargetURL Then
Set IEApp = New InternetExplorer
IEApp.Visible = True
IEApp.navigate Link.href
Exit For
End If
Next Link
End If
End If
End Sub
Dadurch wird das Makro nach einem Link suchen, der mit der angegebenen URL übereinstimmt. Wenn ein entsprechender Link gefunden wird, wird der Internet Explorer geöffnet und der Link automatisch angeklickt.
Quelle: ChatGPT
ungetestet aber sieht recht schlüssig aus.
Gruß
$savedir= 'D:\Download'
$newMailAction = {
foreach ($mail in $Event.SourceArgs.Split(",")){
$mailItem = $objOL.Session.GetItemFromID($mail)
if ($mailitem.HTMLBody -match '(?<=href=")https://export\.srv123\.com/[^"]+'){
write-host "Downloading file '$($matches[0])'" -ForegroundColor green
Invoke-WebRequest -uri $matches[0] -OutFile "$savedir\$([IO.Path]::GetFileName($matches[0]))"
}
}
}
$ol = New-Object -ComObject "Outlook.Application"
$null = Register-ObjectEvent $ol -EventName NewMailEx -Action $newMailAction -SourceIdentifier "NewMailEventSubscriber"
write-host "Waiting for new mails ... " -ForegroundColor Green
while($true){
sleep 1
}
Muss er nicht weil das Skript ein Outlook Event abonniert und die Konsole dazu offen bleiben muss . Zum beenden kann er jeder Zeit STRG+C drücken.
Man kann natürlich auch mit Taskplaner stattdessen jede x Minuten den Posteingang auf neue Mails abfragen, das war jetzt nur ein Live-Beispiel das unmittelbar auf das Eintreffen neuer Mails reagiert, was dann stattdessen in etwa so aussehen könnte
$savedir= 'D:\Download'
$ol = New-Object -ComObject "Outlook.Application"
$newmails = $ol.Session.Stores['user@domain.de'].GetDefaultFolder(6).Items | ?{$_.Unread}
foreach($mail in $newmails){
if ($mail.HTMLBody -match '(?<=href=")https://export\.srv123\.com/[^"]+'){
write-host "Downloading file '$($matches[0])'"
Invoke-WebRequest -uri $matches[0] -OutFile "$savedir\$([IO.Path]::GetFileName($matches[0]))"
$mail.Unread = $false
}
}
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($ol)