package store import ( "fmt" "io" "io/ioutil" "net/mail" ) type SpoolInterface interface { SpoolMessage([]Account, io.Reader) error } // FIXME: we don't actually spool for now, we just store it to each user's // mailbox. This might lead to oddness in the partial delivery case. func (c *concrete) SpoolMessage(recipients []Account, r io.Reader) error { message, err := mail.ReadMessage(r) if err != nil { return err } // FIXME: we can assign our own ID in this case mid := message.Header.Get("Message-ID") if mid == "" { return fmt.Errorf("No Message-ID for this email") } body, err := ioutil.ReadAll(message.Body) if err != nil { return err } for _, recipient := range recipients { message := Message{ ID: mid, Username: recipient.Username, Mailbox: "INBOX", // FIXME: at some point this will be changeable Header: message.Header, Body: body, } if err := c.CreateMessage(message); err != nil { return err } } return nil }