Applescript: создание папки в папке «Входящие» на основе заголовков писем в Outlook и перенос письма в новое хранилище. - PullRequest
0 голосов
/ 03 мая 2019

Я недавно перешел с Windows на MacOS и использовал сценарий VB для создания новой папки в папке «Входящие» на основе заголовка письма, а затем для перемещения писем в новую созданную папку. Я пытаюсь сделать то же самое с AppleScript, но я не смог найти абсолютного ответа, возможно это или нет. В любом случае, это был мой кусок кода на VB, я был бы признателен, если бы кто-нибудь помог мне написать ту же логику в AppleScript (или предложил бы альтернативу каким-либо образом продолжать использовать скрипт VB)

Public Function ReturnNonAlpha(ByVal sString As String) As String

 Dim i As Integer

  For i = 1 To Len(sString)

   If Mid(sString, i, 1) Like "[0-9]" Then

       ReturnNonAlpha = ReturnNonAlpha + Mid(sString, i, 1)

   End If

  Next i

 End Function



Function CheckForFolder(strFolder As String) As Boolean



  Dim olApp As Outlook.Application

  Dim olNS As Outlook.NameSpace

  Dim olInbox As Outlook.MAPIFolder

  Dim FolderToCheck As Outlook.MAPIFolder





 Set olApp = Outlook.Application

 Set olNS = olApp.GetNamespace("MAPI")

 Set olInbox = olNS.GetDefaultFolder(olFolderInbox)



On Error Resume Next

Set FolderToCheck = olInbox.Folders(strFolder)

On Error GoTo 0



If Not FolderToCheck Is Nothing Then

    CheckForFolder = True

End If



ExitProc:

Set FolderToCheck = Nothing

Set olInbox = Nothing

Set olNS = Nothing

Set olApp = Nothing

End Function



Function CreateSubFolder(strFolder As String) As Outlook.MAPIFolder



Dim olApp As Outlook.Application

Dim olNS As Outlook.NameSpace

Dim olInbox As Outlook.MAPIFolder



Set olApp = Outlook.Application

Set olNS = olApp.GetNamespace("MAPI")

Set olInbox = olNS.GetDefaultFolder(olFolderInbox)



Set CreateSubFolder = olInbox.Folders.Add(strFolder)



ExitProc:

Set olInbox = Nothing

Set olNS = Nothing

Set olApp = Nothing

End Function



Function SearchAndMove(lookFor As String)



Dim olApp As Outlook.Application

Dim olNS As Outlook.NameSpace

Dim olInbox As Outlook.MAPIFolder

Dim FolderToCheck As Outlook.MAPIFolder

Dim myItem As Object

Dim MyFolder As Outlook.MAPIFolder

Dim lookIn As String

Dim newName As String

Dim location As Integer

Dim endLocation As Integer







Set olApp = Outlook.Application

Set olNS = olApp.GetNamespace("MAPI")

Set olInbox = olNS.GetDefaultFolder(olFolderInbox)

 For Each myItem In olInbox.Items

 lookIn = myItem.Subject

  If InStr(lookIn, lookFor) Then

     endLocation = InStr(lookIn, "SUP-")

        newName = ReturnNonAlpha(lookIn)

        newName = Mid(newName, 1, 5)

        If CheckForFolder(newName) = False Then

            Set MyFolder = CreateSubFolder(newName)

            myItem.Move MyFolder

                Else

            Set MyFolder = olInbox.Folders(newName)

            myItem.Move MyFolder

        End If

    End If

Next myItem

End Function





Sub myMacro(Item As Outlook.MailItem)

Dim str As String

str = "[JIRA]"

SearchAndMove (str)



End Sub

1 Ответ

0 голосов
/ 04 мая 2019

Я действительно был полон решимости найти решение, поэтому в итоге с некоторой помощью https://hackernoon.com/automated-inbox-cleansing-with-outlook-2016-and-applescript-49cf4c4422fa

Мне удалось написать скрипт, который делает то, что мне нужно. Я думал, что поделюсь этим для будущих ссылок, так как я не вижу много информации о applecript здесь. Этот скрипт в основном создает подпапку в папке «Входящие» на основе темы письма и перемещает туда письмо. Я написал это для решения своей проблемы, но вы можете внести коррективы в свои проблемы.

tell application "Microsoft Outlook"
    set myInbox to folder "Inbox" of default account
    set theMessages to messages 1 through 20 of inbox

    repeat with theMessage in theMessages
      try
        set theSubject to subject of theMessage

        if theSubject contains "[JIRA]" then

            set s to quoted form of theSubject
            do shell script "sed s/[a-zA-Z\\']//g <<< " & s
            set newFolderName to the result
            set numlist to {}
            repeat with i from 1 to count of words in newFolderName
                set this_item to word i of newFolderName
                try
                    set this_item to this_item as number
                    set the end of numlist to this_item
                end try
            end repeat
            set newFolderName to first item of numlist as text
            if mail folder newFolderName exists then
                move theMessage to mail folder newFolderName of myInbox
            else
                make new mail folder at myInbox with properties {name:newFolderName}
                move theMessage to mail folder newFolderName of myInbox
            end if
        end if

    on error errorMsg
        log "Error: " & errorMsg
    end try
end repeat
end tell
...