//use imap to delete a mail func (email *Email) DeleteEmail(w rest.ResponseWriter, r *rest.Request) { log.Printf("delete email...") addr := r.FormValue("imapAddr") //port := r.FormValue("smtpPort") user := r.FormValue("user") pwd := r.FormValue("pwd") id := r.FormValue("id") //check params, return error //create imap client var ( c *imap.Client cmd *imap.Command rsp *imap.Response ) // Connect to the server c, _ = imap.Dial(addr) // Remember to log out and close the connection when finished defer c.Logout(30 * time.Second) // Print server greeting (first response in the unilateral server data queue) log.Printf("Server says hello:%s", c.Data[0].Info) c.Data = nil // Enable encryption, if supported by the server if c.Caps["STARTTLS"] { c.StartTLS(nil) } // Authenticate if c.State() == imap.Login { c.Login(user, pwd) } // List all top-level mailboxes, wait for the command to finish cmd, _ = imap.Wait(c.List("", "%")) // Print mailbox information log.Printf("\nTop-level mailboxes:") for _, rsp = range cmd.Data { log.Printf("|--%s", rsp.MailboxInfo()) } // Check for new unilateral server data responses for _, rsp = range c.Data { log.Printf("Server data:%s", rsp) } c.Data = nil // Open a mailbox (synchronous command - no need for imap.Wait) c.Select("INBOX", true) log.Printf("\nMailbox status:%s\n", c.Mailbox) if c.Mailbox == nil { resp := EmailJsonResponse{Success: true} w.WriteJson(&resp) return } //use Expunge to delete a mail set, _ := imap.NewSeqSet("") mid, _ := strconv.Atoi(id) set.AddNum(uint32(mid)) //delete mail cmd, err := c.Expunge(set) if err != nil { log.Printf("%v ", cmd) } else { log.Printf("delete mail ok") } }