2021-01-26 07:16:53 +01:00
|
|
|
package mstore
|
|
|
|
|
|
|
|
import (
|
2021-01-27 10:07:31 +01:00
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"github.com/emersion/go-imap"
|
2021-01-26 07:16:53 +01:00
|
|
|
"github.com/emersion/go-imap/client"
|
|
|
|
)
|
|
|
|
|
|
|
|
type EMailStoreConfiguration struct {
|
|
|
|
IMAPURL string
|
|
|
|
IMAPPort int
|
|
|
|
IMAPUsername string
|
|
|
|
IMAPPassword string
|
|
|
|
SMTPURL string
|
|
|
|
SMTPPort int
|
|
|
|
SMTPUsername string
|
|
|
|
SMTPPassword string
|
|
|
|
}
|
|
|
|
|
2021-01-27 10:07:31 +01:00
|
|
|
func (esc *EMailStoreConfiguration) Valid() bool {
|
|
|
|
if esc.IMAPURL == "" || esc.IMAPPort == 0 {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
if esc.IMAPUsername == "" || esc.IMAPPassword == "" {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2021-01-26 07:16:53 +01:00
|
|
|
type EMailStore struct {
|
|
|
|
imapClient *client.Client
|
|
|
|
}
|
|
|
|
|
2021-01-27 10:07:31 +01:00
|
|
|
func EMailConnect(conf *EMailStoreConfiguration) (*EMailStore, error) {
|
|
|
|
imapClient, err := client.DialTLS(fmt.Sprintf("%s:%d", conf.IMAPURL, conf.IMAPPort), nil)
|
|
|
|
if err != nil {
|
|
|
|
return &EMailStore{}, err
|
|
|
|
}
|
|
|
|
if err := imapClient.Login(conf.IMAPUsername, conf.IMAPPassword); err != nil {
|
|
|
|
return &EMailStore{}, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return &EMailStore{
|
|
|
|
imapClient: imapClient,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (es EMailStore) Disconnect() {
|
|
|
|
es.imapClient.Logout()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (es EMailStore) Folders() ([]*Folder, error) {
|
|
|
|
boxes, done := make(chan *imap.MailboxInfo), make(chan error)
|
|
|
|
go func() {
|
|
|
|
done <- es.imapClient.List("", "*", boxes)
|
|
|
|
}()
|
|
|
|
|
|
|
|
folders := []*Folder{}
|
|
|
|
for b := range boxes {
|
|
|
|
folders = append(folders, &Folder{
|
|
|
|
Name: b.Name,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := <-done; err != nil {
|
|
|
|
return []*Folder{}, err
|
|
|
|
}
|
2021-01-26 07:16:53 +01:00
|
|
|
|
2021-01-27 10:07:31 +01:00
|
|
|
return folders, nil
|
2021-01-26 07:16:53 +01:00
|
|
|
}
|