Ivanovo Linux Users Group - Not logged in
Forum Help Search Login
Previous Next Up Topic Администрирование / Общее администрирование / exim непонятки, SMTP error 550 и root@localhost (31822 hits)
- By hawk Date 19.10.10 14:22 Edited 19.10.10 14:33
Приветствую всех!

Замутил  связочку exim+dovecot+mysql+clamav+postfixadmin , почта отправляется и принимается, из postfixadmin ящики создаются на диске все норма. Есть майл лист, в общем проблема в том что от Mailer-Daemon на мыло www@ (web скрипт рассылки) постоянно приходит много писем на каждый адрес вот такой ответ (может и не по одному разу):
his message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

  model2000@xxx.ru
    SMTP error from remote mail server after RCPT TO:<model2000@xxx.ru>:
    host mx3.xx.ru [xxx.xxx.xxx.xxx]: 550 5.1.1 <model2000@xxx.ru>:
    Recipient address rejected: undeliverable address:
    Mailbox blocked or address lookup failed

Есть второй сервак (мой) на нем пользователи я знаю они 100% есть, но в ответе от Mailer-Daemon они тоже не найдены 550 еррор. Если телнетом на 110 user model2000@xxx.ru он +OK, т.е. существует. Почему такие ответы. Кстати почта в конечном итоге доползает, но по началу заваливает меня такими сообщениями. Сегодня поступили данные, что почта доходит почему то и не по одному разу, кому то не доходит.

Mailbox blocked or address lookup failed

Думал дело в DNS, поставил ДНС сервак и форвард на ДНС провайдера сделал, поглядел резольв норма. Что еще ему надо.

Вторая проблема - перестала ходить почта на root@localhost, с Exim только разбираюсь, поэтому если вопросы типовые просьба не пинать, а культурно подсказать. По второй проблеме вроде в роуте и транспорт надо ковырять, может ошибаюсь.
По поводу не работающего localhost, все везде прописано, все работает dig @localhost localhost
; <<>> DiG 9.6.2-P2 <<>> @localhost localhost
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64018
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;localhost.                     IN      A

;; ANSWER SECTION:
localhost.              10800   IN      A       127.0.0.1

;; AUTHORITY SECTION:
localhost.              10800   IN      NS      localhost.

;; ADDITIONAL SECTION:
localhost.              10800   IN      AAAA    ::1

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Oct 19 18:29:20 2010
;; MSG SIZE  rcvd: 85

# ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.033 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.037 ms
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent - By LOE (Site/forum admin) Date 19.10.10 17:23
Насколько понял, отлуп идет при попытке отправить почту на второй сервак (это откуда и приходят сообщения Mailbox blocked or address lookup failed)?

Тогда смотри его логи, почему он не принимает почту.

Но судя по сообщению Mailbox blocked or address lookup failed - при принятии почты, ящик оказывается занятым.
Как и куда у тебя складывается почта? Не может ли в это время ктото читать эту почту (так что файл с почтой оказывается залоченым)?

Далее, почту на root принимать очень плохо!
Делай алиас, чтобы она направлялась обычному пользователю.
Ну и смотри опцию
never_users = root
в конфиге экзима.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By hawk Date 20.10.10 04:12 Edited 20.10.10 04:25

>>Насколько понял, отлуп идет при попытке отправить почту на второй сервак (это откуда и приходят сообщения Mailbox blocked or address lookup failed)?


Да, есть второй сервак, тут надо пояснить, внимательно:
Если я просто отправляю письмо пользователю абсолютно любому - письмо доходит. НО, есть система рассылки, WEB скрипт, ящики пользователей в базе, скрипт  вытягивает из базы по 25 адресов и отправляет им, ждет 3 сек, берет еще 25 пользователей и отправляет им и так порядка 1000-2000 ящиков, вот тут начинаются траблы с вышеприведенной ошибкой, почему-то от каждого ящика идет 550 ошибка. И подозреваю, что на момент пика, потом видимо медленно шатко валко рассасывается очередь и письмо доходит в конечном итоге. Но очень напрягает, когда на каждый адрес изначально получаю такую фигню, что его нет. Напрягает и то, что от каждой рассылки получаю на свой админский ящик порядка 3000-4000 писем подобного содержания. Хотя повторюсь конечный пользователь все равно письма получит. Мне кажется при такой скорости постановки сообщений в очередь, почтарь начинает тупить. Тут есть еще один момент, могут ли письма дублироваться сервером? До этого рассылку обслуживал sendmail, тот же скрипт, сейчас новый сервер, скрипт перенесли, поставил Exim и поступают сведения, что писем получают по несколько штук. Лог настолько динамично меняется (при ~2000 письмах за короткий срок) что трудно изучить, хотя и это сделаю конечно.

И еще, на каждое письмо в exiwait вижу такую запись:
delivering 1P7lD3-000HhB-TA: waiting for a remote delivery subprocess to finish
это нормально?

Алиас создан вот такой root@domen.ru я думаю надо на него зарулить с root@localhost ну и сама почта локальная раньше приходила, сейчас числа с 14 тишина, фря по умолчанию шлют отчеты их нет. Поиграюсь с настройками еще.
never_users = root  - в конфиге указан.
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent By hawk Date 20.10.10 04:29
Если нужен конфиг Exim (без коментов), могу предоставить, может в нем с какими параметрами поиграться.
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent By hawk Date 20.10.10 04:53
С почтой ROOT вопрос решенный. Остается вопрос с ошибками.
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent - By LOE (Site/forum admin) Date 20.10.10 05:39
Что значит "просто отправляю"? А скрипт "не просто" отправляет? ;-)
если письмо поступило в спул отправляющего экзима, не важно уже как именно.

Далее, в спул каталоге экзима есть лог-файл для каждого письма - посмотри что в этот момент в нем указано и процитируй сюда.

Далее, 550-ю ошибку выдает второй экзим? Как именно в нем организована доставка почты конечному пользователю? Покажи его транспортный конфиг. Если он направляет письма на довекот, то как тот хранит почту (я не крутил его)? Попробуй организовать вручную smtp-сессию в момент напряга.

И все-таки, обрати внимание на dbmail. За счет того, что все хранится в базе, нет файловых локов, соответственно нет задержек, база есть база.

Дубляж писем может возникать только в конце цепочки доставки, когда есть попытка сохранить письмо адресату, возникает ошибка. но тем не менее письмо сохраняется, хотя и возвращается ошибка, что вызывает повторную попытку доставить письмо.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By hawk Date 20.10.10 05:59 Edited 20.10.10 06:09

>> Что значит "просто отправляю"? А скрипт "не просто" отправляет?


Вот и хочется понять, потому как вижу 550 ошибку и письмо не приходит сразу, делаю телнетом проверку данного юзера на сервере которому засылаю - все ок. В момент пика, и возникновения такой ошибки, делал отправку с сервера который рассылает Exim на Mdaemon - ошибка не возникает. Сам понимаю звучит как ересь, но такая ситуация. Еще раз повторюсь, когда Екзиму суешь по 2000 сообщений за раз с минимальными задержками думаю возникают такие отлупы, если шлешь через почтарь в единичном варианте - то норма все приходит, нет ошибок.

>>Далее, в спул каталоге экзима есть лог-файл для каждого письма - посмотри что в этот момент в нем указано и процитируй сюда.


Процитирую при следующей рассылки.

>>Далее, 550-ю ошибку выдает второй экзим?


550 ошибку выдают все хосты любые, т.к. рассылка по всему не побоюсь этого слова миру ))). Среди не существующих есть и @mail.ru и @yandex.ru и @gmail.com и множество других уже пользовательских почтарей. Т.к. я проверяю рассылку указав свое мыло со второго сервака почтового, там MDaemon, в логе вижу 550 ошибку, типа такого адреса нет, когда адрес этот 100% есть и с ним железно все в порядке. Логи MDaemon гляну, когда повторится ситуация.

Exim & Dovecot - это отправляющая сторона, со стороны получателей любые почтовые сервера, еще раз повторюсь мой пользователь - почтовый ящик на MDaemon, могу конечно в рассылку добавить и второй сервак, он на Postfox + Dovecot, сути это думаю не изменит.
---

>> Дубляж писем может возникать только в конце цепочки доставки, когда есть попытка сохранить письмо адресату, возникает ошибка. но тем не менее письмо сохраняется, хотя и возвращается ошибка, что вызывает повторную попытку доставить письмо.


Возможно так и получается.
Т.к. в самом начале я говорил, не смотря на 550 ошибку, письма в конечном итоге адресаты получают. ПРи этом, если отправка была в первой половине дня утром, письмо может докатится и к 16-17 часам вечера.
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent - By LOE (Site/forum admin) Date 20.10.10 06:56
Совсем запутал, кто и что рассылает и где возникает 550 ошибка.

Распиши алгоритм, типа:

1. стартует скрипт
2. берет базу адресатов
3. в цикле организует коннект(?) к экзиму (какой именно: по 25 порту или exim  -t ?)
4. экзим принимает письмо в свой спул (или не принимает и отдает 550 ошибку?)
5. конец цикла

6. потом на служебный адрес от локального экзима приходит письмо с 550 ошибкой - так?

Раз отсылка по всему миру, то смотреть надо этот первый (и получается единственный) отправляющий почту сервер, второй (он у тебя как контрольный) - вообще не упоминай.
Смотри ограничения на число rcpt to в одной сессии в конфиге, смотри сколько он может процессов запустить, смотри есть ли в скрипте после окончания отсылки на порцию адресов выдача команды RSET.

И (опять-же!!!) цитируй логи экзима!.
Вот пошла порция почты и бац, ошибка - как она то в логах отражается.
Ну сделай grep на адрес, по  которому возникла 550 ошибка, не сложно ведь. Потом grep по ID-экзимовскому этого письма (чтоб все строки посмотреть).

Раз письмо в конце доставляется, значит оно все-таки попало в спул (ведь не скрипт же делает переотсылку? или скрипт?),
а значит - СМОТРИ ЛОГИ ЭКЗИМА!

PS. да и конфиг тогда уж кидай. не пин-код от карточки же там право прописан ;-)
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By hawk Date 20.10.10 09:18 Edited 20.10.10 09:24
LOE  ты 1000 раз прав. Просто приходится заочно вопросы задавать, т.к. на данный момент рассылки нет, как запустят в очередной раз, буду детально собирать информацию. По поводу скрипта отправки - это тоже не моя реализация - это делает PHP программист, на часть вопросов постараюсь ответить, сейчас, рассылка пошла, поэтому свежий лог того что есть прилагаю.
п. 1 2 3
Стартует скрипт, он выбирает из базы данных 50 адресов - делит на два и в два потока по 25 отправляет. Скрипт загоняет каждый адрес в массив и поочередно засылает командой mail(); Из всех проверок, которые делает ПХП программист - это был send или не был. Для работы такой системы достаточно простого стандартного сендмыла или екзима или хоть маилнулла, т.е. полноценный почтарь вовсе и не нужен, тип почтаря не важен. Я поднял с POP, чтобы принимать ответы на этот же хост. Сейчас программист сделал задержку в 0.5 сек между каждой отправкой скриптом.
Екзим принимает письмо в спул, присваевается ID, например 1P8UfE-0008ZS-IY , ну и собственно сообщение :
This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

  resume@xxxx.ru
    SMTP error from remote mail server after RCPT TO:<resume@xxxx.ru>:
    host mail2.xxxx.ru [xx.xx.xx.xx]: 550 5.1.1 User unknown

------ This is a copy of the message, including all the headers. ------

Return-path: <www@yyyy.su>
Received: from www by mx.yyyy.su with local (Exim 4.72 (FreeBSD))
  (envelope-from <www@yyyy.su>)
  id 1P8UfE-0008ZS-IY
  for resume@xxxx.ru; Wed, 20 Oct 2010 13:08:52 +0400
To: resume@xxxx.ru
Subject: =?windows-1251?B?z/Do4+vg+ODl7CDt4CDq8/Dx+yDx9uXt4PDo8fLu4iDoIPDl5ujx8eXw?=  =?windows-1251?B?7uIu?=
Date: Wed, 20 Oct 2010 13:08:52 +0400
From: =?windows-1251?B?ze7i7vHy6CCr0e/l9svg4bs=?= <ss@yyyy.su>
Reply-To: =?windows-1251?B?0e/l9svg4SDt7uLu8fLo?= <reply@yyyy.su>
Message-ID: <c862e98227ed95ee9051a978c3d54903@yyyy.su>
X-Priority: 3
MIME-Version: 1.0
Precedence: bulk
Content-Type: multipart/related;
  type="text/html";
  boundary="b1_c862e98227ed95ee9051a978c3d54903"
Sender: World Wide Web Owner <www@yyyy.su>

--b1_c862e98227ed95ee9051a978c3d54903
Content-Type: multipart/alternative;
  boundary="b2_c862e98227ed95ee9051a978c3d54903"

--b2_c862e98227ed95ee9051a978c3d54903
Content-Type: text/plain; charset = "windows-1251"
Content-Transfer-Encoding: base64

..далее прочие заголовки и тело письма...

Сообщение получаю от Mailer-Daemon@yyyy.su на адрес, с которого осуществлялась рассылка, т.е. www@yyyy.su

>>Смотри ограничения на число rcpt to в одной сессии в конфиге, смотри сколько он может процессов запустить, смотри есть ли в скрипте после окончания отсылки на порцию адресов выдача команды RSET.


команды RSET думаю ни какой нет, простой mail(); через собственный же сервер, если бы тправляли со всеми командами на сервак, то нужен и RSET. Сам Exim на рассылку ни как не заточен, т.е. еще раз повторюсь mail(); и пошло дело....
Как выглядят процессы exim:
# ps waux | grep exim
mailnull   30837  0,0  0,1 28052  5276  ??  Is   12:38     0:00,00 /usr/local/sbin/exim -bd -q30m (exim-4.72-0)
root       31852  0,0  0,1 27924  5296  ??  Ss   13:07     0:00,01 /usr/local/sbin/exim -Mc 1P8UdT-0008Hj-TW (exim-4.72-0)
mailnull   31853  0,0  0,1 27924  5360  ??  S    13:07     0:00,00 /usr/local/sbin/exim -Mc 1P8UdT-0008Hj-TW (exim-4.72-0)
root       31864  0,0  0,1 27924  5328  ??  Ss   13:07     0:00,01 /usr/local/sbin/exim -Mc 1P8UdW-0008Hv-1O (exim-4.72-0)
mailnull   31865  0,0  0,1 27924  5940  ??  S    13:07     0:00,01 /usr/local/sbin/exim -Mc 1P8UdW-0008Hv-1O (exim-4.72-0)
root       31882  0,0  0,1 27924  5328  ??  Ss   13:07     0:00,01 /usr/local/sbin/exim -Mc 1P8UdZ-0008ID-7n (exim-4.72-0)
mailnull   31883  0,0  0,1 27924  5920  ??  S    13:07     0:00,01 /usr/local/sbin/exim -Mc 1P8UdZ-0008ID-7n (exim-4.72-0)
root       31885  0,0  0,1 27924  5344  ??  Ss   13:07     0:00,01 /usr/local/sbin/exim -Mc 1P8UdZ-0008IG-P1 (exim-4.72-0)
mailnull   31886  0,0  0,1 27924  5948  ??  S    13:07     0:00,01 /usr/local/sbin/exim -Mc 1P8UdZ-0008IG-P1 (exim-4.72-0)
root       31902  0,0  0,1 27924  5328  ??  Ss   13:07     0:00,01 /usr/local/sbin/exim -Mc 1P8Udb-0008IX-Ss (exim-4.72-0)
mailnull   31903  0,0  0,1 27924  5372  ??  S    13:07     0:00,00 /usr/local/sbin/exim -Mc 1P8Udb-0008IX-Ss (exim-4.72-0)
root       31905  0,0  0,1 27924  5296  ??  Ss   13:07     0:00,01 /usr/local/sbin/exim -Mc 1P8Udc-0008Ia-Di (exim-4.72-0)
mailnull   31906  0,0  0,1 27924  5344  ??  S    13:07     0:00,00 /usr/local/sbin/exim -Mc 1P8Udc-0008Ia-Di (exim-4.72-0)
root       31908  0,0  0,1 27924  5320  ??  Ss   13:07     0:00,01 /usr/local/sbin/exim -Mc 1P8Udc-0008Id-Un (exim-4.72-0)
root       31910  0,0  0,0  9092  1444   0  S+   13:07     0:00,00 grep exim

поиск по ID:

# less /var/log/exim/mainlog | grep 1P8UfE-0008ZS-IY
2010-10-20 13:08:52 1P8UfE-0008ZS-IY <= www@yyyy.su U=www P=local S=20274 id=c862e98227ed95ee9051a978c3d54903@yyyy.su from <www@securitynews.su> for resume@xxxx.ru
2010-10-20 13:08:53 1P8UfE-0008ZS-IY ** resume@xxxx.ru R=dnslookup T=remote_smtp: SMTP error from remote mail server after RCPT TO:<resume@xxxx.ru>: host mail2.xxxx.ru [xxx.xx.xx.xx]: 550 5.1.1 User unknown
2010-10-20 13:08:53 1P8UfF-0008ZV-0y <= <> R=1P8UfE-0008ZS-IY U=mailnull P=local S=21208 from <> for www@yyyy.su
2010-10-20 13:08:53 1P8UfE-0008ZS-IY Completed

по адресу:
2010-10-19 14:06:23 1P895L-0004gu-Eb ** resume@xxxx.ru R=dnslookup T=remote_smtp: SMTP error from remote mail server after RCPT TO:<resume@xxxx.ru>: host mail2.xxxx.ru [xx.xx.xx.xx]: 550 5.1.1 User unknown
2010-10-19 14:06:43 1P895f-0005a5-CO <= www@yyyy.su U=www P=local S=21162 id=f27fa14f87c07df69ebe7033046a259f@yyyy.su from <www@yyyy.su> for resume@xxxx.ru
2010-10-19 14:06:43 1P895f-0005a5-CO ** resume@xxxx.ru R=dnslookup T=remote_smtp: SMTP error from remote mail server after RCPT TO:<resume@xxxx.ru>: host mail2.xxxx.ru [xx.xx.xx.xx]: 550 5.1.1 User unknown
2010-10-20 13:08:52 1P8UfE-0008ZS-IY <= www@yyyy.su U=www P=local S=20274 id=c862e98227ed95ee9051a978c3d54903@yyyy.su from <www@yyyy.su> for resume@xxxx.ru
2010-10-20 13:08:53 1P8UfE-0008ZS-IY ** resume@xxxx.ru R=dnslookup T=remote_smtp: SMTP error from remote mail server after RCPT TO:<resume@xxxx.ru>: host mail2.xxxx.ru [xx.xx.xx.xx]: 550 5.1.1 User unknown
и так далее..... полно записей таких
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent - By LOE (Site/forum admin) Date 20.10.10 11:57
Так судя по логам, ошибка на _той_ стороне:
# less /var/log/exim/mainlog | grep 1P8UfE-0008ZS-IY
2010-10-20 13:08:52 1P8UfE-0008ZS-IY <= www@yyyy.su U=www P=local S=20274 id=c862e98227ed95ee9051a978c3d54903@yyyy.su from <www@securitynews.su> for resume@xxxx.ru
2010-10-20 13:08:53 1P8UfE-0008ZS-IY ** resume@xxxx.ru R=dnslookup T=remote_smtp: SMTP error from remote mail server after RCPT TO:<resume@xxxx.ru>: host mail2.xxxx.ru [xxx.xx.xx.xx]: 550 5.1.1 User unknown
2010-10-20 13:08:53 1P8UfF-0008ZV-0y <= <> R=1P8UfE-0008ZS-IY U=mailnull P=local S=21208 from <> for www@yyyy.su
2010-10-20 13:08:53 1P8UfE-0008ZS-IY Completed

т.е. локальный экзим принимает через локальной транспорт,
пытается отправить через mail2.xxxx.ru,
_который_ и рапортует 550 ошибку,
и локальный экзим с грустью формирует отчет о недоставке.

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

Вообще, было бы полезно направлять отлупную почту в специальный ящик, скриптиком выгребать отлупы, выдирать сбойный адрес и автоматом его отписывать от рассылки (можно сделать после N отлупов).
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By hawk Date 20.10.10 12:22 Edited 20.10.10 12:29
Вобщем, когда вижу такую ошибку проверяю этот хост по всякому, на существование адреса и через сайты например http://smart-ip.net/tools/check-email и другие есть, и телнетом. Было дело когда он на мой же адрес (только с корпоративного майл сервера) так же ругнулся, я заслал письмо просто из почтаря и получил его. Лог уже в прошлом, сегодня была рассылка, ругани на мои хосты не было. Остальные с 550 ошибкой проверял, тут 50/50, бывает действительно нет адресов, бывает есть, но тем не менее вижу ошибку.
В конфе екзима подредактировал параметры,
smtp_accept_max = 150
smtp_accept_max_per_connection = 100
smtp_connect_backlog = 30
smtp_accept_max_per_host = 50
smtp_accept_reserve = 30
smtp_reserve_hosts = +relay_from_hosts
split_spool_directory = true
remote_max_parallel = 50

Плюс еще ПХП программист добавил задержки на отправку писем в 0.5 с, до этого их не было. Вобщем что могу сказать, стало лучше, т.е. ерроров этих меньше или так совпало, честно не вижу связи.

Сейчас вот сижу и думаю, состругать бы какой скрипт для проверки майлов идея в следующем, выдергиваем из базы все адреса, далее воспроизводим SMTP сессию до момента RCPT, если 250+ норма, если нет - удаляем. Можно конечно проверять просто по домену, функция gethostbyname(); но это только домен, не почтовый ящик.
Можно пыхпом насколько знаю как то так:
$connection = fsockopen("smtp.mail.ru", 25);
fputs($connection, "HELO php\r\n"; );
fputs($connection, "MAIL FROM: php@mail.ru\r\n"; );
fputs($connection, "RCPT TO: otheruser@otherserver.ru\r\n"; );
fputs($connection, "RSET\r\n");
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent - By LOE (Site/forum admin) Date 20.10.10 12:44
Про что и говорю - увидеть бы лог того, как на "сбойный" адрес почта все-таки ушла.

Проверять "рабочесть" адресатов надо не простой smtp сессией до rcp to.
Тут ведь некоторые почтовки отлуп дают после DATA (принимая и складирую почту даже на нерабочий адрес)
Можешь попасть на grey-list сервер, хотя тогда получишь 4xx ошибку.
Есть сервера, которые в процессе smtp сессии в свою очередь проверяют адрес отправителя и если не пройдет проверка - сделают отлуп (хотя адресат нормальный).
и так далее.... ;-)

Еще, в командах:
helo - поставлять полное имя
mail from: - адрес делать в скобках: <e@mail>
rcpt to: - то-же в скобках (некоторые сервера придирчивы к этому)

Сделать выкидывание адреса из базы лучше сделать именно на основании отлупов, придумав свою политику отписки.
Если отлуп N раз подряд - отписка.
Если какая-то рассылка прошла (нет отлупа) - счетчик сбрасывать.
В конце-концов, полностью нерабочие адреса после 10-ти отлупов отсеются.

Ну и ввести политику подписки, сразу-же проверяя существование адресата.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By hawk Date 21.10.10 11:21 Edited 21.10.10 11:28
LOE решил прямо из лога выбирать такие мыла, суммировать строки с одинаковыми адресами и удалять те, которые попадаются более 3х раз, вот что получилось:
# cat /var/log/exim/mainlog | grep '550 5.1.1 User unknown' | sort +1 -n | awk '{print $5}' | grep @ | sort | uniq -c | sort -nr | sed 's/^[ \t]*//' | grep -wv [1-3]
ну и вывод примерно:
58 1111@1111.ru
32 2222@2222.ru
32 3333@3333.ru
26 4444@4444.com
4 5555@5555.ru

соотвественно 1    2    3    удаляются....
Далее удалю еще первый столбец с цифрами и в таком виде (только адреса) выложу на хостинг ПХП программеру, пусть берет мыла с файла и удаляет с базы.
Я зачем это пишу тут, может коряво сделал?
Выглядит корявенько :-)
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent - By LOE (Site/forum admin) Date 21.10.10 13:31
Можно и так делать.
Просто автоматизировав процесс, делаешь один раз и не заботишься )

Но надо учесть, что возвращаемые слова (550 5.1.1 User unknown) зависят от принимающей стороны и могут быть разными.

Т.е. я бы сделал так:
отлупы о недоставке складывать в отдельный ящик.
Скриптик забирает с него письма, выделяет адресата недоставки, складывает данные в базу.
Потом идет анализ базы и удаление адресата из списка рассылки.

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

Мало того, можно сам скрипт, отправляющий почту по списку, научить брать список сбойных адресатов из базы и не отсылать на них почту.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent By hawk Date 21.10.10 14:13
Да, есть над чем подумать.
Тут тоже на самом деле автоматом, файлик кроном формируется, далее ПХП программер его читает и уже из базы удаляет адреса тоже автоматом, думаю в отдельную табличку - на всякий, идея такая. Посмотрю на оптимальность, потом может переделаю.

Кстати на grep ограничения есть какие? Понятно дело некоторые исходники ядра грепают :-), но натыкался на инфу, что при определенном объеме файла могут быть потери.
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent By hawk Date 20.10.10 12:35 Edited 20.10.10 12:48

>> Вообще, было бы полезно направлять отлупную почту в специальный ящик, скриптиком выгребать отлупы, выдирать сбойный адрес и автоматом его отписывать от рассылки (можно сделать после N отлупов).


Только увидел, а идею примерно такую же уже вынашиваю, надо только понять как сделать :-)
Но, как писал в предыдущем посте, тут 50/50, бывает вручную проверяешь и бац, а мыло то живое.

По поводу удаления "не живых" тут тема такая, насколько я знаю. Такие почтовики как gmail mail и иже с ними могут включить домен в спам, т.к. только спамеры шлют не проверяя мыла на доступность. Если говорить о готовых системах рассылки там проверки делаются, у нас к сожалению нет.

Еще вопрос насколько выжны специальные поля, например, цитирую из рассылки по FreeBSD:
Precedence: list
List-Id: Documentation project <freebsd-doc.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/freebsd-doc>,
  <mailto:freebsd-doc-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-doc>
List-Post: <mailto:freebsd-doc@freebsd.org>
List-Help: <mailto:freebsd-doc-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/freebsd-doc>,
  <mailto:freebsd-doc-request@freebsd.org?subject=subscribe>
Sender: owner-freebsd-doc@freebsd.org
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Previous Next Up Topic Администрирование / Общее администрирование / exim непонятки, SMTP error 550 и root@localhost (31822 hits)

Powered by mwForum 2.12.0 © 1999-2007 Markus Wichitill

Page created in 0.079s with 11 database queries.