Initial Email-Forwarder scaffold
This commit is contained in:
commit
91e52aecd0
22 changed files with 1007 additions and 0 deletions
46
backend/04-imap-source.go
Normal file
46
backend/04-imap-source.go
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
package backend
|
||||
|
||||
import "time"
|
||||
|
||||
// RawMessage ist eine 1:1 aus der Quelle geholte Nachricht: der Rohkoerper
|
||||
// plus die Metadaten, die den sauberen Umzug ausmachen.
|
||||
type RawMessage struct {
|
||||
MessageID string // aus Header, Schluessel fuer Idempotenz
|
||||
Body []byte // kompletter RFC822-Rohtext, wird NICHT umgeschrieben
|
||||
Flags []string // \Seen \Answered \Flagged ... 1:1 uebernehmen
|
||||
InternalDate time.Time // Original-Zeit, per APPEND erhalten
|
||||
}
|
||||
|
||||
// Folder ist ein Ordner der Quelle MIT den Infos, die 11-folders.go fuer die
|
||||
// Rollen-Zuordnung braucht: dekodierter Name (Umlaute als Klartext, NICHT
|
||||
// modified-UTF-7), SPECIAL-USE-Attribute und der Hierarchie-Trenner.
|
||||
type Folder struct {
|
||||
Name string // dekodiert, z.B. "Gelöschte Objekte" oder "INBOX.Sent"
|
||||
Attrs []string // z.B. ["\\Sent"] aus SPECIAL-USE
|
||||
Delim string // "." oder "/" — servereigener Trenner
|
||||
}
|
||||
|
||||
// SourceMailbox abstrahiert Quelle (IMAP primaer, POP3 Fallback), damit
|
||||
// 07-migrate.go gegen ein Interface arbeitet.
|
||||
type SourceMailbox interface {
|
||||
Folders() ([]Folder, error) // rekursiver Ordnerbaum
|
||||
Fetch(folder string) ([]RawMessage, error) // Stream: BODY[] FLAGS INTERNALDATE
|
||||
Close() error
|
||||
}
|
||||
|
||||
// OpenIMAPSource verbindet die Quelle per go-imap/v2.
|
||||
//
|
||||
// Verschluesselung nach a.SrcSecurity:
|
||||
// - "tls": imapclient.DialTLS (impliziter TLS, Port 993)
|
||||
// - "starttls": imapclient.DialStartTLS auf Klartext-Port 143
|
||||
// - "none": imapclient.Dial (REINER KLARTEXT, alte Provider!)
|
||||
//
|
||||
// a.SrcInsecure -> tls.Config{InsecureSkipVerify:true} fuer kaputte/selbst-
|
||||
// signierte Zerts. go-imap dekodiert modified-UTF-7-Ordnernamen selbst; wir
|
||||
// geben in Folder.Name den Klartext weiter.
|
||||
func OpenIMAPSource(a Account) (SourceMailbox, error) {
|
||||
// TODO Codex: nach SrcSecurity verbinden, Login, imapSource zurueckgeben.
|
||||
// Folders() = LIST "" "*" mit SPECIAL-USE + Delim; Fetch() = SELECT +
|
||||
// UID FETCH BODY[] FLAGS INTERNALDATE, streamend um RAM zu schonen.
|
||||
return nil, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue