|
Вопрос # 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 сервера. Раньше по стандарту у него можно было спросить, существует ли заданный адрес. Но теперь эту функцию убрали. Если точнее, то сервер может не отвечать на такой запрос, либо отвечать, но с большой задержкой, либо отвечать ответным письмом.
Почему так сделали? Всё банально просто - спамеры.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|