Постоянство пользовательских заголовков в потоке электронной почты - PullRequest
16 голосов
/ 29 сентября 2011

Я, наверное, странный вопрос, но я решил пойти дальше и спросить. Скажем, я отправляю электронное письмо, используя IMAP SMTP, через специальный клиент. Этот клиент добавляет несколько пользовательских заголовков к сообщению электронной почты перед отправкой. Получатель получает это электронное письмо и отвечает мне напрямую (и, возможно, несколько человек из CC тоже).

У меня такой вопрос: учитывая приведенный выше пример, будут ли эти X-заголовки сохраняться во всех новых сообщениях в потоке?

Одна вещь, о которой я могу подумать, это то, что клиент знал бы об отправленном им исходном сообщении электронной почты. Все последующие ответы на это письмо будут иметь заголовок «Reply-To», значение которого равно «Message-Id» предыдущего письма. Я не понимаю, почему я не смог просканировать эти цепочки ответов, пока не добрался до исходного сообщения, отправленного клиентом, и таким образом получил оригинальные пользовательские заголовки.

Может быть, я слишком обдумываю это. Какие-либо предложения? :)

Ответы [ 2 ]

23 голосов
/ 29 сентября 2011

Ответ на сообщение не обязательно содержит что-либо из исходного сообщения. MUA, скорее всего, предложит модифицированную (например, с добавлением «Re:») версию исходного объекта, и, очевидно, адреса также используются для соответствующих значений по умолчанию. Ни одно из другого содержимого сообщения не является частью ответа (если только отправитель намеренно не включает его, как при цитировании или пересылке). Любые X-заголовки, которые у вас есть в вашем сообщении, конечно же, не будут включены в ответ (если вы не контролируете этот MUA).

Однако ваш план отслеживания исходного сообщения вполне осуществим: см. Раздел 3.6.4 RFC 5322 . Каждое сообщение должно (не обязательно) иметь заголовок идентификатора сообщения и, при необходимости, заголовки In-Reply-To и References.

Поле «Message-ID:» содержит один уникальный идентификатор сообщения. Поля «References:» и «In-Reply-To:» содержат один или несколько уникальных идентификаторов сообщений, которые могут быть разделены [пробелами].

In-Reply-To - это упоминание, чтобы идентифицировать сообщение (или сообщения), на которое (а) отвечают, в то время как References идентифицирует всю цепочку беседы. Заголовок References должен содержать все содержимое заголовка References сообщения, на которое вы отвечаете, поэтому вам нужно только последнее сообщение для идентификации всей цепочки.

Обратите внимание, что In-Reply-To и Reply-To - это не одно и то же (последний указывает адрес, на который отправитель желает получить ответы).

Предполагая, что у вас есть исходное сообщение, вы сможете использовать заголовок References любого ответа для идентификации исходного сообщения. Не каждый MUA будет корректно обрабатывать ссылки или In-Reply-To, но большинство будет.

4 голосов
/ 29 сентября 2011

Насколько я знаю, нет причин думать, что любой почтовый клиент будет распространять любые строки заголовка, которые он не понимает. Большинство сохранит тему (обычно добавляя «Re:», если необходимо) и получит строки «To:» и «Cc:» из заголовков предыдущего сообщения, но это все. Я полагаю, что некоторые (но не все) сгенерируют строку «In-Reply-To», но это далеко не так.

Ваша идея о том, чтобы клиент просканировал поток назад в поисках определенных заголовков, звучит так, как если бы это было выполнимо, но вам нужно было бы написать свой собственный почтовый клиент, если вы хотите эту функцию, и вы все равно будете заблокирован тем, что не все почтовые клиенты каким-либо образом сохраняют потоки сообщений.

...