Проблема с вложением электронной почты API Outlook

Я пытаюсь использовать REST API Outlook в своем коде Python для отправки электронного письма от имени пользователя, который уже дает мне свое согласие.

Мне удалось успешно отправить текстовые электронные письма, используя их узел /me/sendmail со следующей полезной нагрузкой:

    email_payload = {
        "Message": {
            "Subject": email_subject,
            "Body": {
                "ContentType": "Text",
                "Content": email_body
            },
            "ToRecipients": [
                {
                    "EmailAddress": {
                        "Address": to
                    }
                }
            ]
        }
    }

Однако при попытке добавить вложения (на основе их документации) я сталкиваюсь с некоторыми проблемами:

        email_payload["Message"]["Attachments"] = [
            {
                "ContentType": "application/pdf",
                "Name": "{0}".format("something.pdf"),
                "ContentBytes": base64.b64encode(attachment.read())
            }
        ]

Проблемы заключаются в коде состояния ответа 415 со следующим содержанием: {u'ошибка': {u'сообщение': u'При попытке прочитать сообщение был обнаружен отсутствующий или пустой заголовок типа контента. Требуется заголовок типа контента.', u'code': u'RequestBodyRead'}}

В их документации ничего по этому поводу не нашел. Надеюсь, кто-нибудь просветит меня :)


person Alex    schedule 04.04.2017    source источник


Ответы (1)


Для всех, у кого есть такие проблемы, вот контекст и исправление:

Изначально, поскольку я отправлял только текстовые электронные письма, заголовок моего запроса выглядел так:

request_headers = {
    'Authorization': "Bearer {0}".format(token),
}

И собственно запрос:

    api_response = requests.post(
        request_url,
        json.dumps(body),
        headers=request_headers
    )

Как вы могли заметить, я не отправлял какой-либо тип контента в своих заголовках (не знаю, почему), но до сих пор все шло хорошо, пока я не решил добавить вложения.

Похоже, если бы мои request_headers тоже содержали бы Content-Type, все бы шло хорошо:

  request_headers = {
             'Authorization': 'Bearer {0}'.format(refreshed_token),
             'Content-Type': 'application/json'
         }
person Alex    schedule 04.04.2017