일정 시간에 Outlook VBA 스크립트 실행

일정 시간에 Outlook VBA 스크립트 실행

이 질문은 이 SO 게시물의 다른(간소화된) 버전입니다(링크).

매일 오후 2시에 자동으로 실행하고 싶은 특정 Outlook VBA 스크립트가 있습니다. 컴퓨터가 항상 켜져 있으므로 클라이언트 측을 실행하는 것은 괜찮습니다. 이 작업을 어떻게 안정적으로 수행할 수 있습니까?

(연결됨) SO 게시물은 제가 시도한 몇 가지 접근 방식을 간략하게 설명합니다.이 SO 게시물한 번에 실행하는 것에 대한 나의 구체적인 질문이 탄생한 접근 방식에 대한 일반적인 질문입니다.

답변1

요약

Google의 smtp 서버를 통해 이메일을 보내는 Powershell 스크립트를 만들어 보겠습니다. 이 스크립트는 일정에 따라 실행할 수 있는 작업 스케줄러를 통해 실행할 수 있습니다. Outlook에서 이메일을 받으면 해당 이메일을 찾는 규칙이 Outlook VBA 스크립트를 트리거합니다. 비올라.

1 단계: VBA 스크립트를 트리거하기 위해 "트리거" 이메일을 보내는 데 사용할 Gmail 계정에 대한 보안 자격 증명 파일을 만듭니다.

Powershell에서 다음을 실행합니다.

read-host -assecurestring | convertfrom-securestring | out-file $Home\autopass.txt

이렇게 하면 해당 Gmail 계정의 비밀번호의 보안 버전이 사용자 디렉토리에 저장됩니다. 2단계 인증을 사용하는 경우앱 비밀번호다음 단계에서 사용하게 될 이 자격 증명의 일반 비밀번호 대신

2 단계: 이 Powershell 스크립트는 제공된 자격 증명을 사용하여 Google의 smtp 서버를 통해 이메일을 보냅니다. Outlook 규칙에서 기록할 매우 독특한 특정 주제(예: "@TRIGGERMYVBA21")를 선택하여 필드를 적절하게 설정하십시오.

   # You must paste your password after running the command:  
   # read-host -assecurestring | convertfrom-securestring | out-file $Home\autopass.txt
   # before running the next part of the script.

   #Create credential file
    $password = get-content $Home\autopass.txt | convertto-securestring
    $credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "[email protected]",$password

    #Send automatic email
    $From = "[email protected]"
    $To = "[email protected]"
    $Subject = "@TRIGGERMYVBA21"
    $Body = "some body"
    $SMTPServer = "smtp.gmail.com"
    $SMTPPort = "587"

    Send-MailMessage -From $From -to $To -Subject $Subject `
        -Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl `
        -Credential ($credentials)

        # possible additions
        # $Cc = "[email protected]"
        # $Attachment = "dir\attachment.txt"
        # both of which require the following tags in the Send-MailMessage command
        # -Attachments $Attachment -Cc $Cc

스크립트를 .ps1 파일로 저장합니다.

3단계:작업으로 "스크립트 실행"을 수행할 수 있는 규칙을 Outlook에서 만들 수 있는지 확인하세요. 그렇게 할 수 없는 경우 regedit를 사용하여 값이 1인 HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security새 DWORD(32비트 값) 로 이동하여 추가해야 합니다 "EnableUnsafeClientMailRules".

4단계: 다음을 찾는 규칙을 만듭니다.

  • 규칙을 트리거하기 위해 Powershell 스크립트에서 사용할 Gmail의 Gmail 주소
  • Powershell 스크립트에서 생성한 고유한 제목 줄(예: "@TRIGGERMYVBA21")

그런 다음:

  • 이메일을 삭제하고,
  • 그리고 스크립트를 실행합니다.

5단계: Powershell 스크립트를 실행하려는 시간에 실행하는 작업 스케줄러 규칙을 설정하십시오. 작업으로 "프로그램 시작"을 선택한 다음 프로그램에 대해 "powershell"을 입력하고 마지막으로 인수 추가 상자에 "-파일 디렉터리\script.ps1"을 입력합니다.

참고로 저는 폴더 이동 VBA 스크립트를 사용하여 조치를 취할 수 있을 때까지 이메일을 일시 중지하는 데 이것을 사용하고 있습니다. 이메일을 특정 폴더로 옮긴 다음 해당 특정 폴더에 대해 규칙이 실행되면 받은 편지함으로 다시 이동됩니다.

완전성을 위해 해당 스크립트가 여기에 포함되었습니다.

Sub moveTheItems(item As Outlook.MailItem)
 Dim myNameSpace As Outlook.NameSpace
 Dim myInbox As Outlook.Folder
 Dim myDestFolder As Outlook.Folder
 Dim myItems As Outlook.Items
 Dim myItem As Object

 Set myNameSpace = Application.GetNamespace("MAPI")
 Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
 Set myItems = myInbox.Items
 Set myDestFolder = myInbox
 Set myItems = myInbox.Folders("Snooze Until 3 PM").Items   

 For i = myItems.Count To 1 Step -1 'Iterates from the end backwards
    myItems.item(i).Move myDestFolder
 Next
End Sub

관련 정보