Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как словить ответ от своего smtp сервера при отправке на не существующий e-mail?
 
 автор: TetRiska   (23.01.2014 в 00:07)   письмо автору
 
 

Всем привет. Вкратце о сервере:
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()){. Перечитал мануалы, обшарил сеть, не нашел ответа. Прошу помощи у вас. Благодарю за внимание.

  Ответить  
 
 автор: Саня   (24.01.2014 в 13:32)   письмо автору
 
   для: 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".

  Ответить  
 
 автор: TetRiska   (25.01.2014 в 02:00)   письмо автору
 
   для: Саня   (24.01.2014 в 13:32)
 

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования