Я не уверен, что это в заголовках или нет, но я ищу способ узнать, является ли электронное письмо, которое я получаю, ответом на отправленное мной электронное письмо, и если да, то только для того, чтобы захватить новый текст, а не «процитировать» текст"
Немного фона: я создаю скрипт, который будет отправлять электронные письма автоматически. Я создаю задание cron для периодического запуска, чтобы проверить, есть ли какие-либо ответы. Если бы были ответы, я только хочу захватить новые вещи, а не старые вещи.
Раньше я отправлял электронные письма с идентификатором в теме (у вас есть новый ответ [1234]), а затем проверял тему для материала между [и]. Затем я бы взял все сообщение и сохранил его, поскольку каждый веб-браузер / адрес электронной почты использует другой символ или стиль для цитируемого текста. Некоторые делают «>» некоторые делают горизонтальное правило, а некоторые абсолютно ничего не делают.
В любом случае, я просто ищу что-то в заголовке электронной почты, который указывает, что они отвечают и каким может быть новый текст. Если это невозможно, я буду продолжать делать то, что делаю.
К сожалению, клиенты электронной почты могут по существу делать все, что захотят, с вашим сообщением, и нет надежного стандарта для определения того, как полученное сообщение возникло у клиента. Кроме того, IMAP на самом деле не имеет к этому никакого отношения. Электронная почта может быть отправлена несколькими способами, включая веб-почту.
Лучшее, что вы можете сделать, это найти идентификационный номер в строке темы (предполагая, что люди не меняют его, что они редко делают). Вы также можете делать то, что делает Google … нечеткое соответствие текста ответа на адрес электронной почты, отправленный на этот адрес. Если это соответствует, считайте его частью ответа. Это требует больших усилий.
Вы можете узнать, является ли электронное письмо ответом другого письма или нет, используя комбинацию In-Reply-To
и References
.
Каждое письмо имеет уникальный идентификатор в заголовке Message-ID
, согласно этому RFC 1 , вы можете отслеживать предков любого электронного письма.
Я проверил его и работает у всех клиентов (Outlook, Thunderbird)
Я приведу пример для использования.
1- В заголовке сообщения электронной почты, которое вы отправляете в первый раз, вы (ваш почтовый сервер или код) отправляете ID (Message-ID)
, если вы открываете источник сообщения электронной почты, вы увидите его в верхнем разделе :
... // You (your code) send: Message-ID: <1@your-domain-mandatory.com> ...
Вам просто нужно сохранить этот Message-ID
в своей программе. любой последующий ответ будет ссылаться на этот ID
.
2- Клиент ответит вам письмо 1 . Клиент отправит вам crucial header
, чтобы сообщить вам, для какого письма этот ответ в дополнение к его собственному Message-ID
.
... // Client(Thunderbird) send: Message-ID: <2@your-domain-mandatory.com> In-Reply-To: <1@your-domain-mandatory.com> ...
Когда вы получите второе письмо, вам будет легко отслеживать предыдущее электронное письмо, которое вы отправили, потому что ID
почты (1) находится в заголовке « In-Reply-To
ответе» почты (2).
3- если вы хотите снова вернуть это письмо внутри своего кода, вам просто нужно поместить Message-ID
почты (2) в заголовок In-Reply-To
и Message-ID
почты (1) и почту (2 ) в заголовке « References
. Таким образом, клиент правильно поймет цепочку.
... // You (your code) send: Message-ID: <3@your-domain-mandatory.com> In-Reply-To: <2@your-domain-mandatory.com> References: <1@your-domain-mandatory.com> <2@your-domain-mandatory.com> ...
В этом заголовке вы сообщаете клиенту, что это письмо является ответом на почту (2), а предки – почта (1) и почта (2).
Я работал с ними и читал о них, и он работает, теперь моя проблема – просто получить текст последнего письма, а не цитируемый текст из ответов. (мы используем собственную систему билета, мы создаем комментарий для каждого письма)