// Send will update the given body with the paramters expected by a Pandora server // and return the Mid generated by the server or an error. func (mb *Mailbox) Send(from, to string, delay time.Duration, body url.Values) (string, error) { var msg pandora.Message msg.Empty(body) msg.SetSender(from) msg.SetReceiver(to) msg.SetClientTime(time.Now()) msg.Set("delay", delay.String()) res, err := mb.Client.PostForm(mb.BaseUrl+"/send", body) if err != nil { return "", err } defer res.Body.Close() if res.StatusCode != http.StatusOK { return "", fmt.Errorf("invalid status code: %v", res.StatusCode) } buf, err := ioutil.ReadAll(res.Body) if err != nil { return "", err } values, err := url.ParseQuery(string(buf)) if err != nil { return "", err } if len(values.Get("error")) > 0 { return "", errors.New(values.Get("error")) } return values.Get("mid"), nil }