1package service23import (4 "fmt"5 "strings"67 "github.com/emersion/go-message/mail"8)910type Address mail.Address1112func (a *Address) String() string {13 return a.Address14}1516func (a *Address) Action() string {17 _, act, _ := a.Parts()18 return act19}2021func (a *Address) WithAction(act string) (naddr *Address) {22 naddr = new(Address)23 if act == CMD_POST || act == "" {24 *naddr = *a25 } else {26 name, _, host := a.Parts()27 naddr = &Address{Address: fmt.Sprintf("%s+%s@%s", name, act, host)}28 }29 return30}3132func (a *Address) Parts() (name, act, host string) {33 i := strings.LastIndex(a.Address, "@")34 if i != -1 {35 name, host = a.Address[:i], a.Address[i+1:]36 } else {37 host = ""38 name = a.Address39 }4041 name, act, _ = strings.Cut(name, "+")42 return43}4445func (a *Address) Base() string {46 name, _, host := a.Parts()47 return fmt.Sprintf("%s@%s", name, host)48}