Полезная информация заголовка IMAP не отображается
Я использую стандартные функции IMAP для получения писем на PHP. Мне нужно следить заMessage-ID
(а такжеReferences
а такжеIn-Reply-To
) для каждого сообщения строить потоки. Как только эта система будет развернута, я хочу, чтобы пользователи могли отвечать на сообщения в своем почтовом клиенте, чтобы добавить сообщение в ветку, но в моем веб-интерфейсе ответы не могут быть прикреплены к исходному сообщению, потому что у меня нетIn-Reply-To
Идентификатор из любых заголовков электронной почты. я хотел бы использоватьIn-Reply-To
ID, чтобы прикрепить их ответ к уведомлению о новом сообщении, которое я отправил им, но не могу, потому что не могу получить идентификаторы. Если бы у меня былIn-Reply-To
заголовок, сообщения могут быть сгруппированы, так как есть поток идентификаторов, соединяющих их.
Кроме того, я хочу иметь возможность отвечать на любое сообщение, которое пользователь отправляет на адрес электронной почты сервера, если произошла ошибка с его отправкой или что-то подобное, в этом случае мне понадобитсяMessage-ID
их сообщения, чтобы я мог сделать этоIn-Reply-To
Идентификатор сообщения, которое я отправляю в ответ.
Я не могу получить значения дляMessage-ID
ниIn-Reply-To
даже если они действительно имеют значения. (Перейдите к любому сообщению в Gmail, щелкните раскрывающееся меню рядом с кнопкой ответа, нажмите «показать оригинал», и вы увидите, что вся информация заголовка, которая отсутствует для меня при вызове функций IMAP, фактически существует, так как хотя Gmail не хочет передавать эту информацию серверам IMAP.)
Я пробовал различные звонки, которые якобы получают информацию заголовка (imap_headerinfo
, imap_fetchheader
, imap_fetch_overview
), но все они возвращают массив разреженных значений для информации заголовка, которая мне не нужна. После выполнения
$this->mbox = imap_open('{imap.gmail.com:993/imap/ssl}', $email, $password);
Я могу получить только несколько полезных значений из заголовка с помощью любого из этих вызовов:
imap_header($this->getImapStream(), "1");
imap_fetch_overview($this->getImapStream(), "1");
imap_fetchheader($this->getImapStream(), "1");
Я вижу такие вещи, какSubject
, To
, Reply-To
и другие значения заголовка, и все они точны, ноMessage-ID
, References
, In-Reply-To
и другая ценная информация заголовка в основном отсутствует (скорее, значения массива, которые их представляют, пусты в каждом случае)
Я почти гарантирую, что проблема не в самом коде, так как я вижу некоторые значения в заголовках и могу успешно извлекать тела сообщений; это просто, как будто Google фильтрует, какую информацию заголовка я вижу.
Вы можете заметить, что у меня точно такой же вопрос, как наэта страница, но мне предложили сделать свой вопрос, вот что я и сделал.
РЕДАКТИРОВАТЬЕсли кто-то может дать мне возможность отвечать на сообщения с моего сервера без необходимости извлекатьMessage-ID
из сообщения, на которое я отвечаю, это было бы одинаково здорово.
Я перечислилMessage-ID
из каждого сообщения в моем очень большом почтовом ящике и, насколько я вижу, около 40% идентификаторов действительно отображаются. Если я снова запускаю тот же тест, те же сообщения сохраняют своиMessage-ID
s. Я ищу шаблон среди сообщений, которые показываютMessage-ID
но есть очень веские доказательства отсутствия шаблонов среди типов сообщений.
Каждое сообщение в действительности имеетMessage-ID
(и я проверил это даже для сообщений, чьи идентификаторы не отображаются с запросами IMAP), но функции IMAP выявляют только идентификаторы некоторых сообщений.