Почему ответы на мои SMTP-отправленные сообщения gmail не являются потоковыми?

#python #gmail #imap #imaplib

#python #gmail #imap #imaplib

Вопрос:

Я отправляю множество похожих электронных писем через SMTP, используя следующий фрагмент Python:

 def send(from_, to, body):
  server = smtplib.SMTP('smtp.gmail.com:587')
  server.ehlo()
  server.starttls()
  server.ehlo()
  server.login('michael@gmail.com', password)
  msg = '''
From: %s
To: %s
Subject: %s

%s''' % (from_, to.encode('utf-8'), "Hello", body.encode('utf-8'))
  server.sendmail(from_, to, msg)
  server.quit()
  

Эти сообщения являются первыми сообщениями в разговоре. Странно, ответы на эти сообщения не передаются в потоковом режиме в диалог исходного сообщения.

Ответ возвращается в виде отдельного сообщения в моем почтовом ящике, subject = «Re: Привет», без привязки к оригиналу. (Очень редко одно из них будет обработано должным образом, что еще более странно.)

Я проверил, что в этих (непоточных) ответах есть поле References:, которое ссылается на поле Message-ID отправленного сообщения, которое было автоматически сгенерировано GMail.

Есть идеи, что я делаю не так?

Ответ №1:

Посмотрите на References: заголовок. Он содержит цепочку предыдущих Message-ID: заголовков в потоке и обычно используется для потоковой передачи. Обычно рекомендуется указывать их Message-ID: самостоятельно, и если вы отслеживаете ранее использованные, вы можете использовать их в References: заголовке для обеспечения потоковой передачи.

Message-ID Должны быть глобально уникальными. Они часто создаются примерно так, но это не является обязательным требованием.

 Message-ID: unixtimestamp.somerandomval@sending-hostname
  

Комментарии:

1. Спасибо, Майкл — Я попробую добавить заголовок Message-ID. Если они потоковые должным образом, я приму ваш ответ.

2. @Michael: спасибо. Предыдущих сообщений нет: единственное сообщение, отправленное по SMTP, является инициирующим диалог. Остальная часть диалога происходит в веб-интерфейсе gmail.

3. К сожалению, я вижу, что GMail автоматически добавляет идентификатор сообщения к моему сообщению, когда оно отправляется по SMTP; независимо от того, указываю я его явно или нет, исходящее сообщение не меняется. Так что я не думаю, что это виновник. Есть еще идеи?

4. Кроме того: ответы, которые обрабатываются некорректно, имеют заголовок References:, ссылающийся на идентификатор сообщения первоначально отправленного сообщения. Может быть, GMail запутался из-за множества похожих электронных писем с идентичными темами и отказался от попыток правильно передавать потоки?