У меня есть веб-приложение PHP с разделом для отправки счета всем партнерам по электронной почте.
Каждый партнер может иметь более одного электронного письма.
Например: КОМПАНИЯ-1 с адресами электронной почты: email_1@company1.com и email_2@company1.com
Я отправляю все с phpmailer.
Я сохраняю в своей базе данных ответ на запрос от почты сервера (в данном случае gmail).
Если отправлено, я сохраню true, иначе false - foreach email.
Но некоторые электронные письма иногда являются неправильными (из-за ошибки при вводе) или отклоняются компанией (в этом случае компания не сообщает нам, а мы все еще отправляем на это удаленное письмо), и мне нравится возвращать эти «проблемы» "с помощью веб-приложения.
(Если я войду в веб-почту Google, я увижу письмо, возвращенное для каждого отправленного на несуществующее письмо, с некоторыми советами / кодом ошибки внутри ... но я не знаю, как получить с помощью PHP)
Я пытался использовать
$inbox = imap_open($hostname,$username,$password);
$emails = imap_search($inbox,'ALL');
Этот скрипт работает, но используя ALL
я получаю тайм-аут.
Я не знаю, как лучше всего получить эти электронные письма с сообщениями «НЕ ДОСТАВЛЕНО ПОЧТЫ ДЛЯ НЕКОТОРЫХ ПРОБЛЕМ».
Моей первой идеей было установить пользовательский Message-ID
в заголовке при отправке:
$messageID = "<" . md5($_SERVER['HTTP_HOST'].(idate("U")-1000000000).uniqid()).'-'.idate("U") . '@' . $_SERVER['HTTP_HOST'] . '>';
$mail->MessageID = $messageID;
, а затем в моем сценарии, используя команду вроде:
$messageID = retrieve_from_database(...);
$emails = imap_search($inbox,'HEADER ' . $messageID);
но запроса не существует HEADER
Я бы хотел, чтобы в моем веб-приложении для каждого отправленного электронного сообщения отображалась, в конце концов, проблема с отскочившим или недоставленным сообщением, но я не знаю, как и что мне нужно «попросить» на imap_search
, чтобы получить ответы, связанные с оригинал отправленного письма.
Я читаю список критериев из документов, но я не нахожу ничего полезного, я думаю: https://www.php.net/manual/en/function.imap-search.php
Пример сценария, который мне нужен:
Я отправляю электронное письмо с Message-ID
: <test@testXYZ>
с my_email@mywebapp.com
на email_not_existing@test.com
. Истинная причина ответа сервера отправлена.
Я вставляю новую запись в таблицу базы данных emails_sent
с результатом отправки true: INSERT INTO emails_sent (ID, email_dest, sent, MessageID, when) VALUES (455, 'email_not_existing@test.com', TRUE, $messageID, '2019-05-30 8:00:00')
Демон gmail отвечает на my_email@mywebapp.com сообщением о недоставленной электронной почте
В моем веб-приложении, когда я захожу на страницу отправленных писем с указанием идентификатора из таблицы emails_sent, мне нужно искать в imap в конце концов ответное письмо с ошибками. В этом примере, когда я запрашиваю ID 455, мне нужно найти ответы на сообщения imap_search, связанные с моим письмом, отправленным с назначенным мной MessageID (или другим способом, который я не знаю ....)