Email connector improvements

This commit is contained in:
James 2026-02-04 22:57:30 -05:00
parent eb92f01ef1
commit 7cef0dee97
1 changed files with 28 additions and 3 deletions

View File

@ -3,6 +3,7 @@ package main
import ( import (
"bytes" "bytes"
"context" "context"
"crypto/tls"
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"log" "log"
@ -55,11 +56,12 @@ func (e *EmailConnector) connect() (*imapclient.Client, error) {
var client *imapclient.Client var client *imapclient.Client
var err error var err error
tlsConfig := &tls.Config{InsecureSkipVerify: true}
switch e.config.TLS { switch e.config.TLS {
case "ssl": case "ssl":
client, err = imapclient.DialTLS(addr, nil) client, err = imapclient.DialTLS(addr, &imapclient.Options{TLSConfig: tlsConfig})
case "starttls": case "starttls":
client, err = imapclient.DialStartTLS(addr, nil) client, err = imapclient.DialStartTLS(addr, &imapclient.Options{TLSConfig: tlsConfig})
default: default:
client, err = imapclient.DialInsecure(addr, nil) client, err = imapclient.DialInsecure(addr, nil)
} }
@ -108,10 +110,12 @@ func (e *EmailConnector) FetchSince(since time.Time) ([]UnifiedMessage, error) {
} }
defer client.Close() defer client.Close()
// Search all folders including Archive so we can find recently-processed messages
folders := e.config.Watch folders := e.config.Watch
if len(folders) == 0 { if len(folders) == 0 {
folders = []string{"INBOX"} folders = []string{"INBOX"}
} }
folders = appendIfMissing(folders, "Archive", "Trash", "Folders/Shopping")
var messages []UnifiedMessage var messages []UnifiedMessage
for _, folder := range folders { 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) 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 folders := e.config.Watch
if len(folders) == 0 { if len(folders) == 0 {
folders = []string{"INBOX"} folders = []string{"INBOX"}
} }
// Append fallback folders for finding archived/deleted messages
folders = appendIfMissing(folders, "Archive", "Trash", "All Mail", "Folders/Shopping")
for _, folder := range folders { for _, folder := range folders {
_, err := client.Select(folder, nil).Wait() _, err := client.Select(folder, nil).Wait()
@ -624,3 +630,22 @@ func (e *EmailConnector) Stop() {
e.cancel() 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
}