2
VBA에서 CDO를 사용하여 Gmail 계정의받은 편지함에 액세스하고 싶습니다. 나는 이미 메일 메시지를 보내 왔지만받은 편지함 메시지를 Excel 시트로 가져 오는 방법을 모릅니다. 가능하면 각 메시지의 태그를 식별 할 수 있기를 바랍니다.vba의 CDO를 통해 Gmail받은 편지함 메일 메시지를 가져 오는 중 Excel
VBA에서 CDO를 사용하여 Gmail 계정의받은 편지함에 액세스하고 싶습니다. 나는 이미 메일 메시지를 보내 왔지만받은 편지함 메시지를 Excel 시트로 가져 오는 방법을 모릅니다. 가능하면 각 메시지의 태그를 식별 할 수 있기를 바랍니다.vba의 CDO를 통해 Gmail받은 편지함 메일 메시지를 가져 오는 중 Excel
특히 CDO를 묻는 질문이 있지만 this similar SO question에서 CDO로 직접 가능하지는 않습니다.
받은 편지함 메일 메시지를 가져 오는 다른 방법으로 Google은 최근 Excel에서 사용할 수있는 Gmail API를 출시했습니다. 다음은 VBA-Web을 사용한 예입니다.
' Setup client and authenticator (cached between requests)
Private pGmailClient As WebClient
Private Property Get GmailClient() As WebClient
If pGmailClient Is Nothing Then
' Create client with base url that is appended to all requests
Set pGmailClient = New WebClient
pGmailClient.BaseUrl = "https://www.googleapis.com/gmail/v1/"
' Use the pre-made GoogleAuthenticator found in authenticators/ folder
' - Automatically uses Google's OAuth approach including login screen
' - Get API client id and secret from https://console.developers.google.com/
' - https://github.com/timhall/Excel-REST/wiki/Google-APIs for more info
Dim Auth As New GoogleAuthenticator
Auth.Setup "Your client id", "Your client secret"
Auth.AddScope "https://www.googleapis.com/auth/gmail.readonly"
Auth.Login
Set pGmailClient.Authenticator = Auth
End If
Set GmailClient = pGmailClient
End Property
' Load messages for inbox
Function LoadInbox() As Collection
Set LoadInbox = New Collection
' Create inbox request with userId and querystring for inbox label
Dim Request As New WebRequest
Request.Resource = "users/{userId}/messages"
Request.AddUrlSegment "userId", "me"
Request.AddQuerystringParam "q", "label:inbox"
Dim Response As WebResponse
Set Response = GmailClient.Execute(Request)
If Response.StatusCode = WebStatusCode.Ok Then
Dim MessageInfo As Dictionary
Dim Message As Dictionary
For Each MessageInfo In Response.Data("messages")
' Load full messages for each id
Set Message = LoadMessage(MessageInfo("id"))
If Not Message Is Nothing Then
LoadInbox.Add Message
End If
Next MessageInfo
End If
End Function
' Load message details
Function LoadMessage(MessageId As String) As Dictionary
Dim Request As New WebRequest
Request.Resource = "users/{userId}/messages/{messageId}"
Request.AddUrlSegment "userId", "me"
Request.AddUrlSegment "messageId", MessageId
Dim Response As WebResponse
Set Response = GmailClient.Execute(Request)
If Response.StatusCode = WebStatusCode.Ok Then
Set LoadMessage = New Dictionary
' Pull out relevant parts of message (from, to, and subject from headers)
LoadMessage.Add "snippet", Response.Data("snippet")
Dim Header As Dictionary
For Each Header In Response.Data("payload")("headers")
Select Case Header("name")
Case "From"
LoadMessage.Add "from", Header("value")
Case "To"
LoadMessage.Add "to", Header("value")
Case "Subject"
LoadMessage.Add "subject", Header("value")
End Select
Next Header
End If
End Function
Sub Test()
Dim Message As Dictionary
For Each Message In LoadInbox
Debug.Print "From: " & Message("from") & ", Subject: " & Message("subject")
Debug.Print Message("snippet") & vbNewLine
Next Message
End Sub
을 사용하는 예입니다.