| 
| 
 | Вопрос # 1 335/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!Проблема следующая:
 Программа рассылает письма с детализацией счетов клиентов на их eMail адреса.
 Проблема в том, что если еМail адреса не существует (например из 10 клиентов у 3-го прописан несуществующий адрес) то генерится Exception и программа прекращает работу.
 Вопрос как проверить, что Exception сгенерился по причине несуществующего адреса чтобы продолжить рассылку писем всем остальным клиентам?
 
|  |   Вопрос задал: Сидаровский Георгий (статус: Посетитель)Вопрос отправлен: 12 февраля 2008, 11:40
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович Здравствуйте, Сидаровский Георгий!try
 ....... отослать письмо.....
 except
 .....запротоколировать ошибку....
 end
 
 Мини-форум вопросаВсего сообщений: 12; последнее сообщение — 12 февраля 2008, 23:20; участников в обсуждении: 4. 
|   | Сидаровский Георгий (статус: Посетитель), 12 февраля 2008, 13:04 [#1]:Как мне узнать что ошибка именно из за не верного адреса? |  
|   | Помфюк Владимир Степанович (статус: Абитуриент), 12 февраля 2008, 13:11 [#2]:except on E:Exception do begin
 куда-то записать E.Message - текст сообщения об ошибке
 end
 |  
|   | Dron (статус: Студент), 12 февраля 2008, 14:19 [#3]:По-моему, вы что-то путаете, господа. Почтовый сервер сообщает об отсутствии адреса, на которое отправлено письмо, отчётом - возвращает письмо назад. Поэтому решение скорее в парсинге этих сообщений. При отправке отследить ошибку "несуществующий адрес" невозможно. Так, как указал П.В.С. можно отследить только "техническую" ошибку отправки - например неудачу при соединении с SMTP-сервером.
 С уважением. |  
|   | Помфюк Владимир Степанович (статус: Абитуриент), 12 февраля 2008, 15:03 [#4]:Никто ничего не путает. Дело в том, что если письмо должно обработаться внутри самого сервера, то все (а может и не все) ошибки он возвращает НЕМЕДЛЕННО, прямо при попытке отправки. По крайней мере отправка на несуществующий адрес ТОЧНО приводит к exception'у. P.S.:ещё один вариант решения - отправка не через специальные компоненты, а напрямую через сокет на 25й порт почтового сервера. Пример работы с SMTP описан здесь http://www.activexperts.com/activemail/telnet/ . Все те же комманды нужно послать из своей программы. Тогда сообщение о несуществующем адресе(и вообще любой ошибке) сможете обработать как захотите.
 |  
|   | Dron (статус: Студент), 12 февраля 2008, 15:19 [#5]:Хм. Тогда почему тот же The Bat! при отправке не сообщает, что адреса не существует? Разработчики не умеют модулями пользоваться и не знают работы протокола? Вообще говоря, письмо может отправляться на какой-то несуществующий адрес, но тем не менее доставляться на какой-то ящик. С помощью алиасов на почтовом сервере можно сделать абсолютно всё.
 С уважением. |  
|   | Помфюк Владимир Степанович (статус: Абитуриент), 12 февраля 2008, 15:35 [#6]:Сообщает. Вот текст: 
 Письмо не отправлено. Сервер сообщает: 5.1.1 Recipient address rejected: User unknown in local recipient table
 
 на сервере FreeBSD+postfix . Может Вы не на локальный адресс пробовали или сервер как-то по другому настроен.
 |  
|   | Dron (статус: Студент), 12 февраля 2008, 15:46 [#7]:Такое сообщение если и выдаётся, то крайне редко. Что вы подразумеваете под локальным адресом?
 С уважением. |  
|   | Помфюк Владимир Степанович (статус: Абитуриент), 12 февраля 2008, 15:56 [#8]:локальное: я отправляю с адреса my_addr@domen.addr на other_addr@domen.addr  - у нас обеих @domen.addr совпадает. Предполагаемая учётная запись находится на том же сервере что и моя, SMTP сервер может сразу определить существует ли она. Так вот если она не существует - выдаётся такое сообщение. Почему в других случаях приходит письмо тоже вполне понятно: о несуществовании пользователя на удалённом сервере мой SMTP не знает и не может сообщить немедленно.
 |  
|   | Dron (статус: Студент), 12 февраля 2008, 16:05 [#9]:Всё логично, со всем согласен. Но ведь автор вопроса не говорил, что адреса, на которые отправляются сообщения, являются локальными. А значит этот механизм изначально неработоспособен.
 С уважением. |  
|   | Помфюк Владимир Степанович (статус: Абитуриент), 12 февраля 2008, 16:15 [#10]:это единственный вариант, когда несуществующий адрес приводит к немедленной ошибке. Кроме того какой механизм неработоспособен?
 try
 except
 end
 есть всегда.
 Прямой диалог с SMTP сервером тоже всегда возможен.
 
 P.S.Мы тут невольно чат устроили.
  Давайте прекращать . |  
|   | Dron (статус: Студент), 12 февраля 2008, 20:11 [#11]:Я говорю о том, что когда письмо отправляется не на локальный адрес, сервер уже не скажет об ошибке, что такого адреса нет - в этом случае как раз придёт отчёт об ошибке. Отследить этот случай уже невозможно. Если автору вопроса такой вариант подойдёт - значит адреса действительно локальные.
 Да, согласен, что чат
  Со своей стороны дискуссию считаю закрытой. С уважением. |  
|   | Вадим К (статус: Академик), 12 февраля 2008, 23:20 [#12]:По поводу ответа SMTP сервера. Раньше по стандарту у него можно было спросить, существует ли заданный адрес. Но теперь эту функцию убрали. Если точнее, то сервер может не отвечать на такой запрос, либо отвечать, но с большой задержкой, либо отвечать ответным письмом. Почему так сделали? Всё банально просто - спамеры.
 Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |