Не удается передать параметр In-Reply-To в Microsoft Graph sendMail

Я разрешаю пользователям отправлять электронные письма со своей учетной записью Outlook с помощью Microsoft Graph API, но, похоже, на другой стороне создается несколько потоков.

При использовании Mailgun API для отправки электронной почты пользователя я могу передать заголовок сообщения In-Reply-To, который ссылается на идентификатор сообщения предыдущего сообщения, и потоки правильно группируются клиентами на другой стороне (Outlook / Gmail и т. Д.)

Но при использовании Microsoft Graph API я пытаюсь передать In-Reply-To, и он не принимается API.

graph_url = 'https://graph.microsoft.com/v1.0'

headers = {
    'User-Agent': 'api/1.0',
    'Authorization': f'Bearer {outlook_token}',
    'Accept': 'application/json',
    'Content-Type': 'application/json'
}

# Create recipient list in required format.
recipient_list = [{'emailAddress': {'name': name, 'address': address}} for name, address in recipients]
reply_to_list = [{'emailAddress': {'name': name, 'address': address}} for name, address in reply_to]

# Create email message in required format.
email_object = {
    'message': {
        'subject': subject,
        'body': {
            'contentType': content_type,
            'content': body
        },
        'toRecipients': recipient_list,
        'replyTo': reply_to_list,
        'attachments': [{
            '@odata.type': '#microsoft.graph.fileAttachment',
            'contentBytes': b64_content.decode('utf-8'),
            'contentType': mime_type,
            'name': file.name
        }],
        'internetMessageHeaders': [
            {
                "name": "In-Reply-To",
                "value": in_reply_to
            },
        ]
    },
    'saveToSentItems': 'true'
}

# Do a POST to Graph's sendMail API and return the response.
request_url = f'{graph_url}/me/microsoft.graph.sendMail'

response = requests.post(url=request_url, headers=headers, json=email_object)

https://docs.microsoft.com/en-us/graph/api/user-sendmail?view=graph-rest-1.0.

Получаю такой ответ:

{
    "error": {
        "code": "InvalidInternetMessageHeader",
        "message": "The internet message header name 'in-Reply-To' should start with 'x-' or 'X-'.",
        "innerError": {
            "request-id": "7f82b9f5-c345-4744-9f21-7a0e9d75cb67",
            "date": "2019-05-03T04:09:43"
        }
    }
}

Есть ли способ, чтобы электронные письма отправлялись в одном потоке для клиентов-получателей?


person Alexandre Paroissien    schedule 02.05.2019    source источник
comment
При использовании Mailgun API я могу передать заголовок сообщения In-Reply-To, который ссылается на идентификатор сообщения предыдущего сообщения, и это позволяет мне обрабатывать потоки.   -  person Alexandre Paroissien    schedule 03.05.2019
comment
Но при использовании Microsoft Graph API я пытаюсь передать In-Reply-To, и он не принимается API (см. Редактирование моего вопроса выше)   -  person Alexandre Paroissien    schedule 03.05.2019


Ответы (1)


Таким образом нельзя манипулировать стандартными заголовками сообщений. Коллекция internetMessageHeaders принимает только «настраиваемые заголовки». Это заголовки сообщений, которые начинаются с x-, т.е. x-some-custom-header).

Чтобы ответить на сообщение, вам необходимо использовать _ 4_ конечная точка:

POST https://graph.microsoft.com/v1.0/me/messages/{id-of-message}/createReply

Это сгенерирует сообщение с соответствующими заголовками. Затем вы можете обновить это сообщение, чтобы добавить дополнительное содержимое / вложения, прежде чем вы отправить его:

PATCH https://graph.microsoft.com/v1.0/me/messages/{id-of-reply}

{
  "body": {
    "contentType": "HTML",
    "content": body
  }
}

POST https://graph.microsoft.com/v1.0/me/messages/{id-of-reply}/send
person Marc LaFleur    schedule 03.05.2019
comment
Я думаю, что моя компания внедрила ответы на электронные письма до того, как были разработаны эти API. Для Graph API у нас есть существующие разрешения пользователей для Mail.Read и Mail.Send. Есть ли способ по-прежнему отправлять ответы по электронной почте с этими разрешениями? Мы думаем, что, возможно, недавно произошло изменение внутреннего доступа, и это влияет на то, как наши клиенты отвечают на электронные письма в нашем приложении. Спасибо! - person hdavidzhu; 25.09.2019
comment
Если это невозможно, нам может потребоваться запросить дополнительные разрешения у наших пользователей. Это может быть очень разрушительным процессом, поэтому мы хотели бы избежать его, если это возможно. - person hdavidzhu; 25.09.2019
comment
Похоже, /reply теперь поддерживает поле message: stackoverflow.com/a/58546651/2204868 - person hdavidzhu; 24.10.2019
comment
Hy @Marc Спасибо за ответ, он развеивает мои сомнения относительно ответа, но не могли бы вы помочь мне определить, что такое {id-of-message}, а что {id-of-reply}? - person harish sharma; 06.01.2020