|
|
|
| Всем привет. Вкратце о сервере:
1 - сервер postfix
2 - отправка ведется через smtp с авторизацией
require '../msender/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->IsSMTP();
$mail->Host = '***';
$mail->SMTPAuth = true;
$mail->Username = '***';
$mail->Password = '***';
$mail->SetFrom('***', '***');
$mail->AddAddress($cmail, $name);
$mail->IsHTML(true);
$mail->Subject = 'Title';
$mail->Body = 'Message';
if($mail->Send()){
// выполняем действия
}
|
3 - отправляем почту phpmailer-ом, последняя версия
4 - также в дополнение установлен Roundcube Webmail
Что нужно конкретно. Отправлять почту и тут же проверять, что она ушла и e-mail на который она ушла существует. Проверить, что почта ушла позволяет конструкция if($mail->Send()){...}. При отправке на не существующий e-mail, в Roundcube Webmail появляются отчеты от MAILER-DAEMON с сообщением, что такой e-mail не существует. Но мне на стороне пхп нужно это проверить после проверки if($mail->Send()){. Перечитал мануалы, обшарил сеть, не нашел ответа. Прошу помощи у вас. Благодарю за внимание. | |
|
|
|
|
|
|
|
для: TetRiska
(23.01.2014 в 00:07)
| | Так просто не получится.
Метод Send() возвращает результат постановки письма в очередь postfix на отправку. На этом этапе ещё неизвестно, будет ли письмо вообще отправлено.
Можете попробовать после отправки письма (внутри ветки if($mail->Send())) залезть по протоколу pop/imap в ящик и посмотреть, не прилетел ли баунс от MAILER-DAEMON. Но это крайне ненадёжный вариант, так как неизвестно через какое время очередь дойдёт до этого письма и сколько времени должно пройти, пока postfix поймёт, что письмо недоставимое и не сформирует отбойник.
Самая жесть начинается, когда postfix получает tempreject от удаленного сервера и письмо падает в deferred queue. В этой очереди оно может пролежать до 5 суток (значение по умолчанию), перед тем как будет сформирован баунс.
Единственный более-менее нормальный вариант - самостоятельно подключаться к MX серверу получателя, начать SMTP сессию и довести её до стадии RCPT TO. Если на RCPT TO сервер ответил ok, значит, скорее всего, ящик существует. После этого соединение можно рвать и отправлять письмо в postfix, чтобы он уже делал всю грязную работу по доставке писем. Но этот вариант довольно трудоёмок и не всегда работает. Например, mail.ru возвращает ok на любые ящики в его доменах, даже несуществующие.
Или можно парсить логи postfix и искать записи, подтверждающие отправку письма. Но если объём почты велик, то парсить огромные логи будет неудобно.
В любом случае не имеет смысла проверка в месте, где производится отправка. Это нужно делать отдельным скриптом, который регулярно будет проверять ящик на наличие отбойников. Можно даже отдельно завести такой ящик для сбора отчётов и добавлять его в специальный заголовок: "Return-Path: bounces@mydomain.example". | |
|
|
|
|
|
|
|
для: Саня
(24.01.2014 в 13:32)
| | Благодарю за развернутый ответ. Все по полочкам. Вопрос можно закрывать. Буду строить отдельный скрипт, который по крону будет пробивать емейлы. | |
|
|
|