diff options
Diffstat (limited to 'config/accounts.go')
-rw-r--r-- | config/accounts.go | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/config/accounts.go b/config/accounts.go index 4d1d60bf..77afa0f9 100644 --- a/config/accounts.go +++ b/config/accounts.go @@ -69,7 +69,8 @@ func (c *RemoteConfig) ConnectionString() (string, error) { } type AccountConfig struct { - Name string + Name string + Backend string // backend specific Params map[string]string @@ -247,6 +248,8 @@ func ParseAccountConfig(name string, section *ini.Section) (*AccountConfig, erro if account.Source == "" { return nil, fmt.Errorf("missing 'source' parameter") } + + account.Backend = parseBackend(account.Source) if account.From == nil { return nil, fmt.Errorf("missing 'from' parameter") } @@ -269,6 +272,23 @@ func ParseAccountConfig(name string, section *ini.Section) (*AccountConfig, erro return &account, nil } +func parseBackend(source string) string { + u, err := url.Parse(source) + if err != nil { + return "" + } + if strings.HasPrefix(u.Scheme, "imap") { + return "imap" + } + if strings.HasPrefix(u.Scheme, "maildir") { + return "maildir" + } + if strings.HasPrefix(u.Scheme, "jmap") { + return "jmap" + } + return u.Scheme +} + func (a *AccountConfig) ParseSource(sec *ini.Section, key *ini.Key) (string, error) { var remote RemoteConfig remote.Value = key.String() |