Outlook 설정

spring·2024년 8월 1일
0

Outlook에서 iCloud 전자 메일 계정 추가 또는 관리 에서 Outlook에서 @icloud.com 이메일을 추가할 수 있다.

Outlook 에서 OTP 문자 자동 복사하기

사실 어떤 이메일을 추가하던 상관없다. Outlook을 켠 다음 Alt + F11을 눌러서 Microsoft Visial Basic for Applications를 연다.

좌측의 THisOutlookSession을 열어서 아래의 코드를 삽입한다.

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Call CheckEmailAndCopyOTP
End Sub

그리고 메뉴에서 삽입 > 모듈 을 클릭해서 열려진 파일에 아래와 같은 내용을 입력한다.

Public Sub CheckEmailAndCopyOTP()
    Dim olMail As Outlook.MailItem
    Dim olInbox As Outlook.Folder
    Dim olItem As Object
    Dim otp As String
    Dim i As Integer
    Dim subjectToCheck As String
    Dim messageBody As String
    Dim regex As Object
    Dim shell
    
    subjectToCheck = "#NAVER"
    ' 제목에 포함되어야 하는 문자열을 지정한다.
    
    Set olInbox = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)

    For i = olInbox.Items.Count To 1 Step -1
        Set olItem = olInbox.Items(i)

        If TypeOf olItem Is Outlook.MailItem Then
            Set olMail = olItem
            If InStr(olMail.Subject, subjectToCheck) > 0 Then
                messageBody = olMail.Body
                Set regex = CreateObject("VBScript.RegExp")
                With regex
                    .Global = True
                    .IgnoreCase = True
                    ' 양 끝이 숫자가 아닌 6자리 숫자
                    .Pattern = "[^\d](\d{6})[^\d]"
                End With
                If regex.Test(messageBody) Then
                    otp = regex.Execute(messageBody)(0).SubMatches(0)
                    ' 클립보드에 OTP 복사
                    CopyTextToClipboard otp
                    ' WScript.Shell 객체를 사용하여 시스템 알림 띄우기
                    Set shell = CreateObject("WScript.Shell")
                    ' shell.Popup "OTP: " & otp, 5, "알림", 64 ' 64는 정보 아이콘
                    shell.Run "powershell -ExecutionPolicy Bypass -File C:\Users\USER\alarm_otp.ps1 '" & otp & "'", 0, False
                End If
                Exit Sub
            End If
        End If
    Next i
End Sub

그리고 한번 더 메뉴에서 삽입 > 모듈 을 클릭해서 열려진 파일에 아래와 같은 내용을 입력한다.

#If VBA7 Then
    Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As Long
    Private Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long
    Private Declare PtrSafe Function CloseClipboard Lib "user32" () As Long
    Private Declare PtrSafe Function SetClipboardData Lib "user32" (ByVal uFormat As Long, ByVal hMem As LongPtr) As LongPtr
    Private Declare PtrSafe Function GlobalAlloc Lib "kernel32" (ByVal uFlags As Long, ByVal dwBytes As LongPtr) As LongPtr
    Private Declare PtrSafe Function GlobalLock Lib "kernel32" (ByVal hMem As LongPtr) As LongPtr
    Private Declare PtrSafe Function GlobalUnlock Lib "kernel32" (ByVal hMem As LongPtr) As Long
    Private Declare PtrSafe Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As LongPtr
#Else
    Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function EmptyClipboard Lib "user32" () As Long
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function SetClipboardData Lib "user32" (ByVal uFormat As Long, ByVal hMem As Long) As Long
    Private Declare Function GlobalAlloc Lib "kernel32" (ByVal uFlags As Long, ByVal dwBytes As Long) As Long
    Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
#End If

Private Const GHND = &H42
Private Const CF_TEXT = 1

Public Sub CopyTextToClipboard(sText As String)
    Dim hGlobalMemory As LongPtr
    Dim lpGlobalMemory As LongPtr
    Dim hClipMemory As LongPtr

    hGlobalMemory = GlobalAlloc(GHND, Len(sText) + 1)
    lpGlobalMemory = GlobalLock(hGlobalMemory)
    lstrcpy lpGlobalMemory, sText
    GlobalUnlock hGlobalMemory

    OpenClipboard 0
    EmptyClipboard
    hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)
    CloseClipboard
End Sub

Microsoft Forms 2.0 Object Library 사용 방법 인데 2번째 모듈로 우리는 필요없다.

Powershell

Powershell을 실행해서 아래의 명령어로 패키지를 설치한다. 두번물어볼텐데 둘 다 Y 눌러주면 된다.

Install-Module -Name BurntToast -Scope CurrentUser

그리고 C:\Users\USER\alarm_otp.ps1 같이 홈 폴더에 alarm_otp.ps1 파일을 만들고 아래와 같이 입력한다.

대충 imagePath같은 것들은 변경해서 사용하면 된다.

Import-Module BurntToast

$otp = $args[0]
$imagePath = "C:\Users\USER\Pictures\naver_logo.png"
New-BurntToastNotification -Text "OTP", "Your OTP code is: $otp`nThe OTP code is already copied to the clipboard." -AppLogo $imagePath

Powershell에서 아래처럼 인자를 주어서 테스트 할 수 있다.

.\alarm_otp.ps1 777111
profile
Researcher & Developer @ NAVER Corp | Designer @ HONGIK Univ.

0개의 댓글