66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
package mail
|
|
|
|
import (
|
|
"net/mail"
|
|
|
|
"apigo.cc/gojs/goja"
|
|
)
|
|
|
|
type Mailbox struct {
|
|
smtpHost string
|
|
smtpPort int
|
|
imapHost string
|
|
imapPort int
|
|
username string
|
|
password string
|
|
senderName string
|
|
senderMail string
|
|
}
|
|
|
|
type Attachment struct {
|
|
Path string
|
|
Name string
|
|
Data string
|
|
ContentType string
|
|
}
|
|
|
|
func (obj *Mailbox) Recv(vm *goja.Runtime, opt *RecvOption) (*RecvResult, error) {
|
|
c, err := obj.OpenIMAP(vm)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer c.Close(vm)
|
|
return c.Recv(vm, opt)
|
|
}
|
|
|
|
func (obj *Mailbox) ParseAddr(addr string) (name, address string, err error) {
|
|
r, err := mail.ParseAddress(addr)
|
|
if err != nil {
|
|
return "", "", err
|
|
}
|
|
return r.Name, r.Address, nil
|
|
}
|
|
|
|
func (obj *Mailbox) ParseAddrList(addrs []string) ([]map[string]string, error) {
|
|
result := make([]map[string]string, len(addrs))
|
|
for i, addr := range addrs {
|
|
name, address, err := obj.ParseAddr(addr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result[i] = map[string]string{
|
|
"name": name,
|
|
"address": address,
|
|
}
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (obj *Mailbox) FormatAddr(name, address string) string {
|
|
addr := &mail.Address{
|
|
Name: name,
|
|
Address: address,
|
|
}
|
|
return addr.String()
|
|
}
|