Skip to content

Commit a6e7596

Browse files
authored
Merge pull request #1 from Alexvallance/unsubscribe-without-delete
Unsubscribe without delete
2 parents c4748ac + b317e72 commit a6e7596

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

client_interface.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ type ClientInterface interface {
99
// Exported methods
1010
CheckSubscription(listID string, email string) (*MemberResponse, error)
1111
Subscribe(listID string, email string, mergeFields map[string]interface{}) (*MemberResponse, error)
12+
UnSubscribe(listID string, email string, mergeFields map[string]interface{}) (*MemberResponse, error)
1213
UpdateSubscription(listID string, email string, mergeFields map[string]interface{}) (*MemberResponse, error)
1314
RemoveSubscription(listID string, email string, mergeFields map[string]interface{}) (*MemberResponse, error)
1415
SetBaseURL(baseURL *url.URL)

unsubscribe.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package mailchimp
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"io/ioutil"
7+
8+
"github.com/RichardKnop/go-mailchimp/status"
9+
)
10+
11+
// Unsubscribe ...
12+
func (c *Client) UnSubscribe(listID string, email string, mergeFields map[string]interface{}) (*MemberResponse, error) {
13+
// Make request
14+
params := map[string]interface{}{
15+
"email_address": email,
16+
"status": status.Unsubscribed,
17+
"merge_fields": mergeFields,
18+
}
19+
resp, err := c.do(
20+
"PUT",
21+
fmt.Sprintf("/lists/%s/members/", listID),
22+
&params,
23+
)
24+
if err != nil {
25+
return nil, err
26+
}
27+
defer resp.Body.Close()
28+
29+
// Read the response body
30+
data, err := ioutil.ReadAll(resp.Body)
31+
if err != nil {
32+
return nil, err
33+
}
34+
35+
// Allow any success status (2xx)
36+
if resp.StatusCode/100 == 2 {
37+
// Unmarshal response into MemberResponse struct
38+
memberResponse := new(MemberResponse)
39+
if err := json.Unmarshal(data, memberResponse); err != nil {
40+
return nil, err
41+
}
42+
return memberResponse, nil
43+
}
44+
45+
// Request failed
46+
errorResponse, err := extractError(data)
47+
if err != nil {
48+
return nil, err
49+
}
50+
return nil, errorResponse
51+
}

0 commit comments

Comments
 (0)