1

Error message:

"errorMessage": "Object of type bytes is not JSON serializable"

def _get_file():
    s3 = boto3.resource('s3')
    obj = s3.Object(S3_BUCKET_NAME, S3_ITEM_NAME)
    return obj.get()['Body'].read()

def _send_email_with_ebook(email):
    data = {
        ...
        "attachments": [
            {
                "content": _get_ebook_file(),
                "type": "application/pdf",
                "filename": "my_file.pdf"
            }
        ]
    }

    headers = {'Authorization': 'Bearer {}'.format(SENDGRID_API_KEY), 'Content-Type': 'application/json'}
    r = requests.post(SENDGRID_API_URL, json=data, headers=headers)

1 Answers1

1

You need encode to base64 your file content for example:

import base64

def _get_file():
    s3 = boto3.resource('s3')
    obj = s3.Object(S3_BUCKET_NAME, S3_ITEM_NAME)
    return obj.get()['Body'].read()

def _send_email_with_ebook(email):
    data = {
        ...
        "attachments": [
            {
                "content": base64.b64encode(_get_ebook_file()),
                "type": "application/pdf",
                "filename": "my_file.pdf"
            }
        ]
    }

    headers = {'Authorization': 'Bearer {}'.format(SENDGRID_API_KEY), 'Content-Type': 'application/json'}
    r = requests.post(SENDGRID_API_URL, json=data, headers=headers)
Dmitry Leiko
  • 3,970
  • 3
  • 25
  • 42