'Make a call to the SES API.
:type action: string
:param action: The API method to use (e.g. SendRawEmail)
:type params: dict
:param params: Parameters that will be sent as POST data with the API
call.'

def _make_request(self, action, params=None):

    ct = 'application/x-www-form-urlencoded;    charset=UTF-8'
    headers = {'Content-Type': ct}
    params = (params or {})
    params['Action'] = action
    for (k, v) in params.items():
        if isinstance(v, six.text_type):
            params[k] = v.encode('utf-8')
    response = super(SESConnection, self).make_request('POST', '/', headers=headers, data=urllib.parse.urlencode(params))
    body = response.read().decode('utf-8')
    if (response.status == 200):
        list_markers = ('VerifiedEmailAddresses', 'Identities', 'DkimTokens', 'DkimAttributes', 'VerificationAttributes', 'SendDataPoints')
        item_markers = ('member', 'item', 'entry')
        e = boto.jsonresponse.Element(list_marker=list_markers, item_marker=item_markers)
        h = boto.jsonresponse.XmlHandler(e, None)
        h.parse(body)
        return e
    else:
        self._handle_error(response, body)
