85 lines
1.9 KiB
Go
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}
|
|
}
|