// GetLists returns the specified set of mailing lists administered by your account. func (mg *MailgunImpl) GetLists(limit, skip int, filter string) (int, []List, error) { r := simplehttp.NewHTTPRequest(generatePublicApiUrl(listsEndpoint)) r.SetClient(mg.Client()) r.SetBasicAuth(basicAuthUser, mg.ApiKey()) p := simplehttp.NewUrlEncodedPayload() if limit != DefaultLimit { p.AddValue("limit", strconv.Itoa(limit)) } if skip != DefaultSkip { p.AddValue("skip", strconv.Itoa(skip)) } if filter != "" { p.AddValue("address", filter) } var envelope struct { Items []List `json:"items"` TotalCount int `json:"total_count"` } response, err := makeRequest(r, "GET", p) if err != nil { return -1, nil, err } err = response.ParseFromJSON(&envelope) return envelope.TotalCount, envelope.Items, err }
// CreateList creates a new mailing list under your Mailgun account. // You need specify only the Address and Name members of the prototype; // Description, and AccessLevel are optional. // If unspecified, Description remains blank, // while AccessLevel defaults to Everyone. func (mg *MailgunImpl) CreateList(prototype List) (List, error) { r := simplehttp.NewHTTPRequest(generatePublicApiUrl(listsEndpoint)) r.SetClient(mg.Client()) r.SetBasicAuth(basicAuthUser, mg.ApiKey()) p := simplehttp.NewUrlEncodedPayload() if prototype.Address != "" { p.AddValue("address", prototype.Address) } if prototype.Name != "" { p.AddValue("name", prototype.Name) } if prototype.Description != "" { p.AddValue("description", prototype.Description) } if prototype.AccessLevel != "" { p.AddValue("access_level", prototype.AccessLevel) } response, err := makePostRequest(r, p) if err != nil { return List{}, err } var l List err = response.ParseFromJSON(&l) return l, err }
// GetMembers returns the list of members belonging to the indicated mailing list. // The s parameter can be set to one of three settings to help narrow the returned data set: // All indicates that you want both Members and unsubscribed members alike, while // Subscribed and Unsubscribed indicate you want only those eponymous subsets. func (mg *MailgunImpl) GetMembers(limit, skip int, s *bool, addr string) (int, []Member, error) { r := simplehttp.NewHTTPRequest(generateMemberApiUrl(listsEndpoint, addr)) r.SetClient(mg.Client()) r.SetBasicAuth(basicAuthUser, mg.ApiKey()) p := simplehttp.NewUrlEncodedPayload() if limit != DefaultLimit { p.AddValue("limit", strconv.Itoa(limit)) } if skip != DefaultSkip { p.AddValue("skip", strconv.Itoa(skip)) } if s != nil { p.AddValue("subscribed", yesNo(*s)) } var envelope struct { TotalCount int `json:"total_count"` Items []Member `json:"items"` } response, err := makeRequest(r, "GET", p) if err != nil { return -1, nil, err } err = response.ParseFromJSON(&envelope) return envelope.TotalCount, envelope.Items, err }
// UpdateRoute provides an "in-place" update of the specified route. // Only those route fields which are non-zero or non-empty are updated. // All other fields remain as-is. func (mg *MailgunImpl) UpdateRoute(id string, route Route) (Route, error) { r := simplehttp.NewHTTPRequest(generatePublicApiUrl(routesEndpoint) + "/" + id) r.SetClient(mg.Client()) r.SetBasicAuth(basicAuthUser, mg.ApiKey()) p := simplehttp.NewUrlEncodedPayload() if route.Priority != 0 { p.AddValue("priority", strconv.Itoa(route.Priority)) } if route.Description != "" { p.AddValue("description", route.Description) } if route.Expression != "" { p.AddValue("expression", route.Expression) } if route.Actions != nil { for _, action := range route.Actions { p.AddValue("action", action) } } // For some reason, this API function just returns a bare Route on success. // Unsure why this is the case; it seems like it ought to be a bug. var envelope Route err := putResponseFromJSON(r, p, &envelope) return envelope, err }
// UpdateWebhook replaces one webhook setting for another. func (mg *MailgunImpl) UpdateWebhook(t, u string) error { r := simplehttp.NewHTTPRequest(generateDomainApiUrl(mg, webhooksEndpoint) + "/" + t) r.SetBasicAuth(basicAuthUser, mg.ApiKey()) p := simplehttp.NewUrlEncodedPayload() p.AddValue("url", u) _, err := makePutRequest(r, p) return err }
// CreateComplaint registers the specified address as a recipient who has complained of receiving spam // from your domain. func (m *MailgunImpl) CreateComplaint(address string) error { r := simplehttp.NewHTTPRequest(generateApiUrl(m, complaintsEndpoint)) r.SetBasicAuth(basicAuthUser, m.ApiKey()) p := simplehttp.NewUrlEncodedPayload() p.AddValue("address", address) _, err := makePostRequest(r, p) return err }
// Unsubscribe adds an e-mail address to the domain's unsubscription table. func (mg *MailgunImpl) Unsubscribe(a, t string) error { r := simplehttp.NewHTTPRequest(generateApiUrl(mg, unsubscribesEndpoint)) r.SetBasicAuth(basicAuthUser, mg.ApiKey()) p := simplehttp.NewUrlEncodedPayload() p.AddValue("address", a) p.AddValue("tag", t) _, err := makePostRequest(r, p) return err }
// ChangeCredentialPassword attempts to alter the indicated credential's password. func (mg *MailgunImpl) ChangeCredentialPassword(id, password string) error { if (id == "") || (password == "") { return ErrEmptyParam } r := simplehttp.NewHTTPRequest(generateCredentialsUrl(mg, id)) r.SetBasicAuth(basicAuthUser, mg.ApiKey()) p := simplehttp.NewUrlEncodedPayload() p.AddValue("password", password) _, err := makePutRequest(r, p) return err }
// CreateDomain instructs Mailgun to create a new domain for your account. // The name parameter identifies the domain. // The smtpPassword parameter provides an access credential for the domain. // The spamAction domain must be one of Delete, Tag, or Disabled. // The wildcard parameter instructs Mailgun to treat all subdomains of this domain uniformly if true, // and as different domains if false. func (m *MailgunImpl) CreateDomain(name string, smtpPassword string, spamAction string, wildcard bool) error { r := simplehttp.NewHTTPRequest(generatePublicApiUrl(domainsEndpoint)) r.SetBasicAuth(basicAuthUser, m.ApiKey()) payload := simplehttp.NewUrlEncodedPayload() payload.AddValue("name", name) payload.AddValue("smtp_password", smtpPassword) payload.AddValue("spam_action", spamAction) payload.AddValue("wildcard", strconv.FormatBool(wildcard)) _, err := makePostRequest(r, payload) return err }
// Campaigns have been deprecated since development work on this SDK commenced. // Please refer to http://documentation.mailgun.com/api_reference . func (m *MailgunImpl) UpdateCampaign(oldId, name, newId string) error { r := simplehttp.NewHTTPRequest(generateApiUrl(m, campaignsEndpoint) + "/" + oldId) r.SetBasicAuth(basicAuthUser, m.ApiKey()) payload := simplehttp.NewUrlEncodedPayload() payload.AddValue("name", name) if newId != "" { payload.AddValue("id", newId) } _, err := makePostRequest(r, payload) return err }
// CreateCredential attempts to create associate a new principle with your domain. func (mg *MailgunImpl) CreateCredential(login, password string) error { if (login == "") || (password == "") { return ErrEmptyParam } r := simplehttp.NewHTTPRequest(generateCredentialsUrl(mg, "")) r.SetClient(mg.Client()) r.SetBasicAuth(basicAuthUser, mg.ApiKey()) p := simplehttp.NewUrlEncodedPayload() p.AddValue("login", login) p.AddValue("password", password) _, err := makePostRequest(r, p) return err }
// Campaigns have been deprecated since development work on this SDK commenced. // Please refer to http://documentation.mailgun.com/api_reference . func (m *MailgunImpl) CreateCampaign(name, id string) error { r := simplehttp.NewHTTPRequest(generateApiUrl(m, campaignsEndpoint)) r.SetClient(m.client) r.SetBasicAuth(basicAuthUser, m.ApiKey()) payload := simplehttp.NewUrlEncodedPayload() payload.AddValue("name", name) if id != "" { payload.AddValue("id", id) } _, err := makePostRequest(r, payload) return err }
// AddBounce files a bounce report. // Address identifies the intended recipient of the message that bounced. // Code corresponds to the numeric response given by the e-mail server which rejected the message. // Error providees the corresponding human readable reason for the problem. // For example, // here's how the these two fields relate. // Suppose the SMTP server responds with an error, as below. // Then, . . . // // 550 Requested action not taken: mailbox unavailable // \___/\_______________________________________________/ // | | // `-- Code `-- Error // // Note that both code and error exist as strings, even though // code will report as a number. func (m *MailgunImpl) AddBounce(address, code, error string) error { r := simplehttp.NewHTTPRequest(generateApiUrl(m, bouncesEndpoint)) r.SetBasicAuth(basicAuthUser, m.ApiKey()) payload := simplehttp.NewUrlEncodedPayload() payload.AddValue("address", address) if code != "" { payload.AddValue("code", code) } if error != "" { payload.AddValue("error", error) } _, err := makePostRequest(r, payload) return err }
// CreateRoute installs a new route for your domain. // The route structure you provide serves as a template, and // only a subset of the fields influence the operation. // See the Route structure definition for more details. func (mg *MailgunImpl) CreateRoute(prototype Route) (Route, error) { r := simplehttp.NewHTTPRequest(generatePublicApiUrl(routesEndpoint)) r.SetBasicAuth(basicAuthUser, mg.ApiKey()) p := simplehttp.NewUrlEncodedPayload() p.AddValue("priority", strconv.Itoa(prototype.Priority)) p.AddValue("description", prototype.Description) p.AddValue("expression", prototype.Expression) for _, action := range prototype.Actions { p.AddValue("action", action) } var envelope struct { Message string `json:"message"` *Route `json:"route"` } err := postResponseFromJSON(r, p, &envelope) return *envelope.Route, err }
// GetFirstPage retrieves the first batch of events, according to your criteria. // See the GetEventsOptions structure for more details on how the fields affect the data returned. func (ei *EventIterator) GetFirstPage(opts GetEventsOptions) error { if opts.ForceAscending && opts.ForceDescending { return fmt.Errorf("collation cannot at once be both ascending and descending") } payload := simplehttp.NewUrlEncodedPayload() if opts.Limit != 0 { payload.AddValue("limit", fmt.Sprintf("%d", opts.Limit)) } if opts.Compact { payload.AddValue("pretty", "no") } if opts.ForceAscending { payload.AddValue("ascending", "yes") } if opts.ForceDescending { payload.AddValue("ascending", "no") } if opts.Begin != noTime { payload.AddValue("begin", formatMailgunTime(&opts.Begin)) } if opts.End != noTime { payload.AddValue("end", formatMailgunTime(&opts.End)) } if opts.Filter != nil { for k, v := range opts.Filter { payload.AddValue(k, v) } } url, err := generateParameterizedUrl(ei.mg, eventsEndpoint, payload) if err != nil { return err } return ei.fetch(url) }