Как быстрее узнать что почтовый ящик получателя переполнен?

Игорёк

Новичок
Делаю одну штуку с отправкой почты (не спaм).
Необходимо сразу же, в течение 5 минут уведомить отправителя, что возникли какие-то проблемы с отправкой. В PHP-функции mail ввёл дополнительный параметр -f задающий адрес return-path, и в течении пяти минут после отправки смотрю в том ящике отлупы. Если есть отлуп с адресом получателя в теле, то уведомляю отправителя, что возникли проблемы с отправкой. Бывают конечно отлупы некритичные, но в данном случае задача такова, что лучше перестраховаться.

И вот выявился неприятный момент: если ящик получателя переполнен, то никакой отлуп может очень долго не приходить, а почтовик сам пытается многократно отправить письмо, это может растянуться на день. И только потом, после множества попыток, приходит отлуп, когда он уже не нужен.

Можно ли узнать быстрее, что ящик получателя переполнен? Может быть есть ещё какие-то параметры кроме -f ?
 

С.

Продвинутый новичок
Отправлять не через свой SMTP-сервер, а напрямую на сервер получателя.
 

Игорёк

Новичок
Отправлять не через свой SMTP-сервер, а напрямую на сервер получателя.
Ага, спасибо. Может быть есть какой-то уже готовый инструмент для этого (класс)? А то я посмотрел - что-то много всего надо сделать (определение и выбор ретрансляторов и тому подобное). Не уверен, что если сам напишу, то это будет работать везде.
 

С.

Продвинутый новичок
Безусловно есть, надо поискать. Хотя там ничего сложного, основную работу делает getmxrr().
 

Активист

Активист
Команда форума
Главное еще настройте валидный для сервера SPF (sender policy framework) и DKIM подпись что бы была. PTR для IP сервера совпадала с EHLO приветствием (а также что бы ptr запись вела на hostname, который в свою очередь вел на этот же ip), иначе сервера в большинстве своем будут вас слать лесом как спаммера выдавая или 5xx или 4xx коды ответов.
 

Игорёк

Новичок
getmxrr() + Swift_SmtpTransport, чего там искать.
Оказывается у всех хостеров 25-й порт(SMTP) закрыт, мой хостер не хочет открывать.
Я решил попробовать пойти более лёгким путём.
В инструкции к postfix и sendmail написано что параметром -N можно задать уровень оповещений DSN (Delivery Status Notification).
Например так: -N delay,failure
То есть и при задержке должен посылаться отлуп.

Я написал php-скрипт с прямым вызовом sendmail, как здесь:
http://phpclub.ru/detail/article/mail

Код:
<?php
$sender = '[email protected]';
$body = 'test1 test2 test3';
$sendmail = "/usr/sbin/sendmail -t -i [email protected]";
$fd = popen($sendmail, "w");
if ($fd == FALSE) {
echo("error<br>\n");
exit();
}
fputs($fd, "To: [email protected]\n");
fputs($fd, "From: \"INFO\" <$sender>\n");
fputs($fd, "Subject: Finally\n");
fputs($fd, "X-Mailer: Mailer Name\n\n");
fputs($fd, $body);
pclose($fd);
echo("sendmail-OK<br>\n");
?>
Он работает, отсылает письмо и оно доходит.
Но когда добавляю параметр -N в любую позицию командной строки
"/usr/sbin/sendmail -t -i [email protected] -N delay,failure"

то письмо вообще не отсылается, хотя выводится sendmail-OK.
Что я не так делаю и где копать?

P.S. Почему я думаю, что проверка на delay должна сработать: хостер говорит, что удалённый SMTP получателя при переполненном ящике отвечает "повторите позже", но sendmail хостера просто сохраняет у себя письмо, ничего не сообщая, и в дальнейшем делает попытки передавать его.
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Не понимаю, зачем кто-то пользуется шаред хостингом, когда впски кругом по пять баксов.
 

Игорёк

Новичок
Не понимаю, зачем кто-то пользуется шаред хостингом, когда впски кругом по пять баксов.
У меня нет достаточной квалификации чтобы всё это настраивать. Мне же нужно очень узкую задачу решить, по-возможности "подручными средствами". Параметр -N вроде же должен работать.
 

С.

Продвинутый новичок
Что значит "25-й порт закрыт"? А как тогда почта ходит через sendmail?
 

Игорёк

Новичок
Параметр -N вроде же должен работать.
Я кажется понял - на хостинге под командой sendmail на самом деле сидит Exim. Возможно он этот параметр не поддерживает, буду с ним разбираться, может ему как-то по-другому надо задавать.

P.S. Тут пишут, что Exim не поддерживает DSN: http://ru.wikipedia.org/wiki/Exim
придётся просить у хостера другой почтовик, если он у него есть.
 
Последнее редактирование:

Активист

Активист
Команда форума
Не может этого быть, как тогда почту посылать? Что это за хостер такой?
 
Сверху