79 lines
2.6 KiB
Go
79 lines
2.6 KiB
Go
|
package mailgun
|
||
|
|
||
|
import (
|
||
|
"github.com/mbanzon/simplehttp"
|
||
|
"strconv"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
complaintsEndpoint = "complaints"
|
||
|
)
|
||
|
|
||
|
// Complaint structures track how many times one of your emails have been marked as spam.
|
||
|
// CreatedAt indicates when the first report arrives from a given recipient, identified by Address.
|
||
|
// Count provides a running counter of how many times
|
||
|
// the recipient thought your messages were not solicited.
|
||
|
type Complaint struct {
|
||
|
Count int `json:"count"`
|
||
|
CreatedAt string `json:"created_at"`
|
||
|
Address string `json:"address"`
|
||
|
}
|
||
|
|
||
|
type complaintsEnvelope struct {
|
||
|
TotalCount int `json:"total_count"`
|
||
|
Items []Complaint `json:"items"`
|
||
|
}
|
||
|
|
||
|
// GetComplaints returns a set of spam complaints registered against your domain.
|
||
|
// Recipients of your messages can click on a link which sends feedback to Mailgun
|
||
|
// indicating that the message they received is, to them, spam.
|
||
|
func (m *MailgunImpl) GetComplaints(limit, skip int) (int, []Complaint, error) {
|
||
|
r := simplehttp.NewHTTPRequest(generateApiUrl(m, complaintsEndpoint))
|
||
|
r.SetBasicAuth(basicAuthUser, m.ApiKey())
|
||
|
|
||
|
if limit != -1 {
|
||
|
r.AddParameter("limit", strconv.Itoa(limit))
|
||
|
}
|
||
|
if skip != -1 {
|
||
|
r.AddParameter("skip", strconv.Itoa(skip))
|
||
|
}
|
||
|
|
||
|
var envelope complaintsEnvelope
|
||
|
err := getResponseFromJSON(r, &envelope)
|
||
|
if err != nil {
|
||
|
return -1, nil, err
|
||
|
}
|
||
|
return envelope.TotalCount, envelope.Items, nil
|
||
|
}
|
||
|
|
||
|
// GetSingleComplaint returns a single complaint record filed by a recipient at the email address provided.
|
||
|
// If no complaint exists, the Complaint instance returned will be empty.
|
||
|
func (m *MailgunImpl) GetSingleComplaint(address string) (Complaint, error) {
|
||
|
r := simplehttp.NewHTTPRequest(generateApiUrl(m, complaintsEndpoint) + "/" + address)
|
||
|
r.SetBasicAuth(basicAuthUser, m.ApiKey())
|
||
|
|
||
|
var c Complaint
|
||
|
err := getResponseFromJSON(r, &c)
|
||
|
return c, 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
|
||
|
}
|
||
|
|
||
|
// DeleteComplaint removes a previously registered e-mail address from the list of people who complained
|
||
|
// of receiving spam from your domain.
|
||
|
func (m *MailgunImpl) DeleteComplaint(address string) error {
|
||
|
r := simplehttp.NewHTTPRequest(generateApiUrl(m, complaintsEndpoint) + "/" + address)
|
||
|
r.SetBasicAuth(basicAuthUser, m.ApiKey())
|
||
|
_, err := makeDeleteRequest(r)
|
||
|
return err
|
||
|
}
|