Email connector improvements
This commit is contained in:
parent
eb92f01ef1
commit
7cef0dee97
|
|
@ -3,6 +3,7 @@ package main
|
|||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"log"
|
||||
|
|
@ -55,11 +56,12 @@ func (e *EmailConnector) connect() (*imapclient.Client, error) {
|
|||
var client *imapclient.Client
|
||||
var err error
|
||||
|
||||
tlsConfig := &tls.Config{InsecureSkipVerify: true}
|
||||
switch e.config.TLS {
|
||||
case "ssl":
|
||||
client, err = imapclient.DialTLS(addr, nil)
|
||||
client, err = imapclient.DialTLS(addr, &imapclient.Options{TLSConfig: tlsConfig})
|
||||
case "starttls":
|
||||
client, err = imapclient.DialStartTLS(addr, nil)
|
||||
client, err = imapclient.DialStartTLS(addr, &imapclient.Options{TLSConfig: tlsConfig})
|
||||
default:
|
||||
client, err = imapclient.DialInsecure(addr, nil)
|
||||
}
|
||||
|
|
@ -108,10 +110,12 @@ func (e *EmailConnector) FetchSince(since time.Time) ([]UnifiedMessage, error) {
|
|||
}
|
||||
defer client.Close()
|
||||
|
||||
// Search all folders including Archive so we can find recently-processed messages
|
||||
folders := e.config.Watch
|
||||
if len(folders) == 0 {
|
||||
folders = []string{"INBOX"}
|
||||
}
|
||||
folders = appendIfMissing(folders, "Archive", "Trash", "Folders/Shopping")
|
||||
|
||||
var messages []UnifiedMessage
|
||||
for _, folder := range folders {
|
||||
|
|
@ -271,11 +275,13 @@ func (e *EmailConnector) FetchOne(sourceID string) (*UnifiedMessage, error) {
|
|||
return nil, fmt.Errorf("invalid source ID: %s", sourceID)
|
||||
}
|
||||
|
||||
// Try each watched folder
|
||||
// Try watched folders first, then Archive/Trash/All Mail
|
||||
folders := e.config.Watch
|
||||
if len(folders) == 0 {
|
||||
folders = []string{"INBOX"}
|
||||
}
|
||||
// Append fallback folders for finding archived/deleted messages
|
||||
folders = appendIfMissing(folders, "Archive", "Trash", "All Mail", "Folders/Shopping")
|
||||
|
||||
for _, folder := range folders {
|
||||
_, err := client.Select(folder, nil).Wait()
|
||||
|
|
@ -624,3 +630,22 @@ func (e *EmailConnector) Stop() {
|
|||
e.cancel()
|
||||
}
|
||||
}
|
||||
|
||||
// appendIfMissing adds folders to the slice if not already present
|
||||
func appendIfMissing(slice []string, items ...string) []string {
|
||||
result := make([]string, len(slice))
|
||||
copy(result, slice)
|
||||
for _, item := range items {
|
||||
found := false
|
||||
for _, s := range result {
|
||||
if s == item {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
result = append(result, item)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue