Files
vt/integration/mailing/imap_integration.go
2026-01-22 17:39:04 +01:00

85 lines
1.9 KiB
Go

package mailing
import (
"context"
"fmt"
"time"
"git.kocoder.xyz/kocoded/vt/fx/interfaces"
imap "github.com/BrianLeishman/go-imap"
)
type imapIntegration struct {
id *imap.Dialer
}
// Invoke implements interfaces.BasicIntegration.
func (i *imapIntegration) Invoke() {
fmt.Println("Invoked!")
}
// OnStart implements interfaces.BasicIntegration.
func (i *imapIntegration) OnStart(ctx context.Context) error {
fmt.Println("Integration IMAP started")
return nil
}
// OnStop implements interfaces.BasicIntegration.
func (i *imapIntegration) OnStop(ctx context.Context) error {
fmt.Println("Integration IMAP stopped")
return nil
}
func NewImapIntegration() interfaces.BasicIntegration {
fmt.Println("New Imap Integration")
imap.Verbose = true
imap.RetryCount = 1
imap.DialTimeout = 10 * time.Second
imap.CommandTimeout = 30 * time.Second
m, err := imap.New("me@kocoder.xyz", "&,25,upMeddeEnTYPTifaccEptIonaAlErGiE", "mx.kocoder.xyz", 993)
if err != nil {
panic(err)
}
if err := m.SelectFolder("INBOX"); err != nil {
panic("Failed to select inbox")
}
uids, err := m.GetUIDs("UNSEEN")
if err != nil {
panic("Search")
}
emails, err := m.GetEmails(uids[:5]...)
if err != nil {
panic("Getting EMails")
}
for uid, email := range emails {
fmt.Printf("\n--- Email UID %d ---\n", uid)
fmt.Printf("From: %s\n", email.From)
fmt.Printf("Subject: %s\n", email.Subject)
fmt.Printf("Date: %s\n", email.Sent.Format("Jan 2, 2006 3:04 PM"))
fmt.Printf("Size: %.1f KB\n", float64(email.Size)/1024)
if len(email.Text) > 100 {
fmt.Printf("Preview: %.100s...\n", email.Text)
} else if len(email.Text) > 0 {
fmt.Printf("Preview: %s\n", email.Text)
}
if len(email.Attachments) > 0 {
fmt.Printf("Attachments: %d\n", len(email.Attachments))
for _, att := range email.Attachments {
fmt.Printf(" - %s (%.1f KB)\n", att.Name, float64(len(att.Content))/1024)
}
}
}
return &imapIntegration{id: m}
}