-1

I'm trying to convert the mailgun curl command for sending email to golang. This is the original curl:

curl -s --user 'api:key-3ax6xnjp29jd6fds4gc373sgvjxteol0' \ 
https://api.mailgun.net/v3/samples.mailgun.org/messages \
 -F from='Excited User <excited@samples.mailgun.org>' \
 -F to='devs@mailgun.net' \
 -F subject='Hello' \
 -F text='Testing some Mailgun awesomeness!'

Updated code:

    var b bytes.Buffer
    w := multipart.NewWriter(&b)
    fw, err := w.CreateFormField("from")
    if err != nil {
        log.Println(err)
    }
    _, err = fw.Write([]byte("Excited User <excited@samples.mailgun.org>"))
    if err != nil {
        log.Println(err)
    }

    fw, err = w.CreateFormField("to")
    if err != nil {
        log.Println(err)
    }
    _, err = fw.Write([]byte("devs@mailgun.net"))
    if err != nil {
        log.Println(err)
    }

    fw, err = w.CreateFormField("subject")
    if err != nil {
        log.Println(err)
    }
    _, err = fw.Write([]byte("Hello"))
    if err != nil {
        log.Println(err)
    }

    fw, err = w.CreateFormField("text")
    if err != nil {
        log.Println(err)
    }
    _, err = fw.Write([]byte("Testing some Mailgun awesomeness!"))
    if err != nil {
        log.Println(err)
    }

    w.Close()

    req, err := http.NewRequest("POST", "https://api.mailgun.net/v3/samples.mailgun.org/messages", &b)
    if err != nil {
        log.Println(err)
    }
    req.SetBasicAuth("api", "key-3ax6xnjp29jd6fds4gc373sgvjxteol0")

    req.Header.Add("Content-Type", w.FormDataContentType())
    // req.Header.Add("Content-Type", "application/x-www-form-urlencoded")

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        log.Println(err)
    }
    defer resp.Body.Close()

    fmt.Printf("Resp: %s\n", resp)

I have of course changed api:key-3ax6xnjp29jd6fds4gc373sgvjxteol0, https://api.mailgun.net/v3/samples.mailgun.org/messages and devs@mailgun.net to my own API and email address, but it doesn't seem to work..

Could someone please take a look to see what I might be doing wrong?

fisker
  • 709
  • 1
  • 12
  • 25
  • For sending mail (as opposed to learning `net/http`) you might want Mailgun's Go SDK: https://github.com/mailgun/mailgun-go – twotwotwo Jun 27 '17 at 05:09
  • @twotwotwo yeah thanks, I saw the package before, but I felt like it would be good to learn how to convert the curl command both because of future use but also because the package seems to ask for different info – fisker Jun 27 '17 at 06:24

1 Answers1

1

Option -F send a multipart field according to CURL documentation:

-F, --form CONTENT Specify HTTP multipart POST data (H)

This can help you: https://stackoverflow.com/a/20397167/1786696

Fulldump
  • 407
  • 3
  • 4