-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgmail.service.go
More file actions
70 lines (59 loc) · 1.65 KB
/
gmail.service.go
File metadata and controls
70 lines (59 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package main
import (
"encoding/base64"
"log"
gmail "google.golang.org/api/gmail/v1"
)
type message struct {
gmailID string
snippet string
}
func sendTranslatedText(client *gmail.Service, message string, config *configService) {
msg := buildResponseMessage(message, config)
_, err := client.Users.Messages.Send(TargetUserID, &msg).Do()
if err != nil {
log.Fatalf("Unable to send translated text %v", err)
}
}
func buildResponseMessage(body string, config *configService) gmail.Message {
var message gmail.Message
messageStr := []byte("From: 'me'\r\n" +
"To: " + config.TranslationRecipient + "\r\n" +
"Subject: " + config.Subject + " \r\n" +
"\r\n" + body)
message.Raw = base64.RawURLEncoding.EncodeToString((messageStr))
return message
}
func getUnreadMessages(client *gmail.Service) []message {
return listMessages(client, TargetUserID, UnreadMessagesQuery)
}
func listMessages(service *gmail.Service, userID string, query string) []message {
messages := []message{}
pageToken := ""
request := service.Users.Messages.List(userID).Q(query)
for {
if pageToken != "" {
request.PageToken(pageToken)
}
req, err := request.Do()
if err != nil {
log.Fatalf("Unable to retrieve messages: %v", err)
}
log.Printf("Processing %v messages...\n", len(req.Messages))
for _, m := range req.Messages {
msg, err := service.Users.Messages.Get(userID, m.Id).Do()
if err != nil {
log.Fatalf("Unable to retrieve message %v: %v", m.Id, err)
}
messages = append(messages, message{
gmailID: msg.Id,
snippet: msg.Snippet,
})
}
if req.NextPageToken == "" {
break
}
pageToken = req.NextPageToken
}
return messages
}