I have a .py script which I would like to run automatically upon reception of mail from sender with a certain subject. What would be the best way to achieve this?
Advertisement
Answer
You can use the module exchangelib to access your email, but you can’t just have it listen. You would need to scrape it on an interval. You can also se VBA macros discussed here: https://learn.microsoft.com/en-us/office/vba/outlook/concepts/getting-started/writing-an-outlook-macro An example:
Sub OffensiveWords(Item As MailItem) Dim arrSpam As Variant Dim strBody As String Dim i As Long strBody = Item.Subject & " " & Item.Body ' Set up the array - use lower case arrSpam = Array("funded", "ppp", "loan", "funding", "word5") ' Go through the array and look for a match, then do something For i = LBound(arrSpam) To UBound(arrSpam) If InStr(LCase(strBody), arrSpam(i)) Then ' do whatever here Item.Categories = "Spammy" Item.Save Exit Sub Next i End Sub ' use this to test the rules script - select a message and run this macro Sub RunAndRules() Dim objApp As Outlook.Application Dim objItem As Object ' MailItem Set objApp = Application Set objItem = objApp.ActiveExplorer.Selection.Item(1) 'macro name you want to run goes here OffensiveWords objItem End Sub
https://www.slipstick.com/outlook/filter-messages-offensive-words/
https://pypi.org/project/exchangelib/
from exchangelib import Credentials, Account credentials = Credentials('john@example.com', 'topsecret') account = Account('john@example.com', credentials=credentials, autodiscover=True) for item in account.inbox.all().order_by('-datetime_received')[:100]: print(item.subject, item.sender, item.datetime_received)