Outlook에서 iCloud 전자 메일 계정 추가 또는 관리 에서 Outlook에서 @icloud.com
이메일을 추가할 수 있다.
사실 어떤 이메일을 추가하던 상관없다. 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을 실행해서 아래의 명령어로 패키지를 설치한다. 두번물어볼텐데 둘 다 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