Знать, было ли электронное письмо ответом с использованием IMAP в PHP


Я не уверен, есть ли это в заголовках или нет, но я ищу способ определить, является ли полученное мной электронное письмо ответом на отправленное мной электронное письмо, и если да, то только захватить новый текст, а не "текст в кавычках"

Небольшая предыстория: Я создаю скрипт, который будет автоматически отправлять электронные письма. Я создаю задание cron для периодического запуска, чтобы проверить, были ли какие-либо ответы. Если бы были ответы, я хотел бы взять только новые вещи, а не старые.

В в прошлом я отправлял электронные письма с идентификатором в теме (у вас есть новый ответ [1234]), а затем проверял тему на наличие материала между [и]. Затем я бы взял все сообщение и сохранил его, так как каждый веб-браузер/электронная почта использует другой символ или стиль для текста в кавычках. Некоторые делают ">", некоторые делают горизонтальное правило, некоторые не делают абсолютно ничего.

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

Author: Tim Withers, 2011-11-28

2 answers

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

Лучшее, что вы можете сделать, это найти идентификационный номер в строке темы (при условии, что люди не меняют его, что они редко делают). Вы также можете делать то, что делает Google... нечетко сопоставьте текст ответа с электронной почтой, которую вы отправили на этот адрес. Если это совпадает, считайте это частью ответа. Однако это требует больших усилий.

 3
Author: Brad, 2011-11-28 03:58:10

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

Каждое электронное письмо имеет уникальный идентификатор в заголовке под названием Message-ID, согласно этому RFC 1, вы можете отслеживать предков любого электронного письма.

Я проверил его, и он работает во всех клиентах (Outlook, Thunderbird)
Я приведу пример для использования.

1- В заголовке электронного письма, которое вы отправляете в первый раз, вы (ваша почта сервер или вы в коде) отправьте ID (Message-ID), если вы откроете исходный код письма, вы увидите его вот так в верхнем разделе:

... // You (your code) send:
Message-ID: <[email protected]>    
...

Вам просто нужно сохранить это Message-ID в своей программе. любой последующий ответ будет относиться к этому ID.

2- Клиент ответит вам по электронной почте 1. Клиент отправит вам crucial header, чтобы сообщить, для какого электронного письма этот ответ в дополнение к своему собственному Message-ID.

... // Client(Thunderbird) send:
Message-ID: <[email protected]>    
In-Reply-To: <[email protected]>
...

Когда вы получите второе электронное письмо, вам будет легко сохранить отслеживайте предыдущее отправленное вами электронное письмо, потому что ID почты(1) находится в заголовке In-Reply-To почты(2).

3- если вы хотите снова ответить на это электронное письмо в своем коде, вам просто нужно поместить Message-ID почты(2) в заголовок In-Reply-To и Message-ID почты(1) и почты(2) в заголовок References. Таким образом, клиент правильно поймет цепочку.

... // You (your code) send:
Message-ID: <[email protected]>
In-Reply-To: <[email protected]>
References: <[email protected]> <[email protected]>   
...

Этим заголовком вы сообщаете клиенту, что это электронное письмо является ответом на почту (2), а предками являются почта(1) и почта (2).

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

 5
Author: Mohammad Eghlima, 2017-01-29 12:45:00