Gmail не поддерживает потоки ответов, отправленных через API - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь отправить ответы через Gmail API в Python и, похоже, не могу заставить веб-клиент Gmail обрабатывать сообщения.Тем не менее, они добавляются в Outlook, что очень странно.

Вот как я создаю сообщения:

def create_message(sender, to, subject, message_text, reply_to, thread_id, message_id):
    message = MIMEText(message_text, 'html')
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject

    if reply_to:
        message['threadId'] = thread_id
        message['In-Reply-To'] = message_id
        message['References'] = message_id


    return {'raw': base64.urlsafe_b64encode(message.as_string())}

Где thread_id и message_id - MIMEИдентификатор сообщения, отформатированный как <CAGvK4+WJmQGjg6R_QT4rJQApFPeH2xV14DnAVcksTtrc7giE8A@mail.gmail.com>.

Я попытался изменить message['threadId'] на threadId, возвращаемый createMessage (что-то вроде 168f38ab8c831d11), сохраняя при этом In-Reply-To и ReferencesЗаголовки как MIME Message-ID, но это тоже не работает (фактически это делает сообщение не потоком как в Gmail , так и в Outlook).

Любая помощь приветствуется!Я попробовал почти все комбинации установки этих заголовков, о которых я могу думать без удачи.Спасибо!

1 Ответ

0 голосов
/ 16 февраля 2019

Для тех, кто сталкивался с этим в будущем, я смог разобраться!

Похоже, что установка заголовка threadId для message['threadId'], заголовка In-Reply-To для электронной почтыадреса (отправителя в моем случае) и заголовка References для идентификатора сообщения MIME достаточно, чтобы получить сообщение для потока на стороне получателя, но не на стороне отправителя.Во многих случаях это было бы хорошо, но я хотел, чтобы почтовый ящик отправителя оставался организованным, поэтому необходимо было создать многопоточность.

Для того, чтобы сообщения направлялись на стороне отправителя, необходимо добавить threadId к сообщению в качестве дополнительного параметра, вне raw:

{'raw': base64.urlsafe_b64encode(message.as_string()), 'threadId': thread_id}

Теперь моя create_message функция выглядит следующим образом:

def create_message(sender, to, subject, message_text, reply_to, thread_id, message_id):
    message = MIMEText(message_text, 'html')
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject

    if reply_to:
        message['threadId'] = thread_id
        message['In-Reply-To'] = sender
        message['References'] = message_id

        return {'raw': base64.urlsafe_b64encode(message.as_string()), 'threadId': thread_id}

    return {'raw': base64.urlsafe_b64encode(message.as_string())}

Где:

  • reply_to - логическое значение, указывающее, является ли конкретное создаваемое сообщение ответом на поток или новым сообщением
  • thread_id является message['threadId'], должно выглядеть примерно так168f809fbb5e9838
  • message_id - это заголовок ID сообщения MIME, должен выглядеть примерно так: <CAGvK4+W5G3KnYQmjvcpTJ=OCfvPQeWUHcLJG39JVGX4V3y1efA@mail.gmail.com>

Надеюсь, кто-то найдет это полезным !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...