Sample code for 30+ languages & platforms
Xbase++

SendGrid -- Send Email with Attachment

See more SendGrid Examples

Sends an email with an attachment.

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oHttp
LOCAL oJson
LOCAL oBd
LOCAL oResp
LOCAL nRespStatusCode

nSuccess := 0

//  This example assumes the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

oHttp := CreateObject("Chilkat.Http")

//  Implements the following CURL command:

//  curl --request POST \
//    --url https://api.sendgrid.com/v3/mail/send \
//    --header 'authorization: Bearer YOUR_API_KEY' \
//    --header 'Content-Type: application/json' \
//    --data '{"personalizations": [{"to": [{"email": "recipient@example.com"}]}],"from": {"email": "sender@example.com"},"subject":"Hello, World!","content": [{"type": "text/html","value": "Hey,<br>Please find attachment."}], "attachments": [{"content": "BASE64_ENCODED_CONTENT", "type": "text/plain", "filename": "attachment.txt"}]}'

//  Use the following online tool to generate HTTP code from a CURL command
//  Convert a cURL Command to HTTP Source Code

//  Use this online tool to generate code from sample JSON:
//  Generate Code to Create JSON

//  The following JSON is sent in the request body.

//  {
//    "personalizations": [
//      {
//        "to": [
//          {
//            "email": "recipient@example.com"
//          }
//        ]
//      }
//    ],
//    "from": {
//      "email": "sender@example.com"
//    },
//    "subject": "Hello, World!",
//    "content": [
//      {
//        "type": "text/html",
//        "value": "Hey,<br>Please find attachment."
//      }
//    ],
//    "attachments": [
//      {
//        "content": "BASE64_ENCODED_CONTENT",
//        "type": "text/plain",
//        "filename": "attachment.txt"
//      }
//    ]
//  }

oJson := CreateObject("Chilkat.JsonObject")
oJson:UpdateString("personalizations[0].to[0].email", "recipient@example.com")
oJson:UpdateString("from.email", "sender@example.com")
oJson:UpdateString("subject", "Hello, World!")
oJson:UpdateString("content[0].type", "text/html")
oJson:UpdateString("content[0].value", "Hey,<br>Please find attachment.")

//  Load a file to be attached.
oBd := CreateObject("Chilkat.BinData")
nSuccess := oBd:LoadFile("qa_data/pdf/hello.pdf")

oJson:UpdateString("attachments[0].content", oBd:GetEncoded("base64"))
oJson:UpdateString("attachments[0].type", "application/pdf")
oJson:UpdateString("attachments[0].filename", "hello.pdf")

//  Adds the "Authorization: Bearer YOUR_API_KEY" header.
oHttp:AuthToken := "YOUR_API_KEY"

oResp := CreateObject("Chilkat.HttpResponse")
nSuccess := oHttp:HttpJson("POST", "https://api.sendgrid.com/v3/mail/send", oJson, "application/json", oResp)
IF (nSuccess == 0)
    ? oHttp:LastErrorText
    oHttp:destroy()
    oJson:destroy()
    oBd:destroy()
    oResp:destroy()
    RETURN
ENDIF

nRespStatusCode := oResp:StatusCode
? "Response Status Code = " + Str(nRespStatusCode)
IF (nRespStatusCode != 202)
    ? "Response Header:"
    ? oResp:Header
    ? "Response Body:"
    ? oResp:BodyStr
    ? "Failed."
    oHttp:destroy()
    oJson:destroy()
    oBd:destroy()
    oResp:destroy()
    RETURN
ENDIF

? "Success."

oHttp:destroy()
oJson:destroy()
oBd:destroy()
oResp:destroy()