Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 335

Раздел: Delphi » Прочее
/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Проблема следующая:
Программа рассылает письма с детализацией счетов клиентов на их eMail адреса.
Проблема в том, что если еМail адреса не существует (например из 10 клиентов у 3-го прописан несуществующий адрес) то генерится Exception и программа прекращает работу.
Вопрос как проверить, что Exception сгенерился по причине несуществующего адреса чтобы продолжить рассылку писем всем остальным клиентам?

Сидаровский Георгий Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Сидаровский Георгий (статус: Посетитель)
Вопрос отправлен: 12 февраля 2008, 11:40
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович

Здравствуйте, Сидаровский Георгий!
try
....... отослать письмо.....
except
.....запротоколировать ошибку....
end

Ответ отправил: Помфюк Владимир Степанович (статус: Абитуриент)
Время отправки: 12 февраля 2008, 12:13


Мини-форум вопроса

Всего сообщений: 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

Dron (статус: Студент), 12 февраля 2008, 14:19 [#3]:

По-моему, вы что-то путаете, господа. Почтовый сервер сообщает об отсутствии адреса, на которое отправлено письмо, отчётом - возвращает письмо назад. Поэтому решение скорее в парсинге этих сообщений. При отправке отследить ошибку "несуществующий адрес" невозможно.
Так, как указал П.В.С. можно отследить только "техническую" ошибку отправки - например неудачу при соединении с SMTP-сервером.
С уважением.
Помфюк Владимир Степанович

Помфюк Владимир Степанович (статус: Абитуриент), 12 февраля 2008, 15:03 [#4]:

Никто ничего не путает. Дело в том, что если письмо должно обработаться внутри самого сервера, то все (а может и не все) ошибки он возвращает НЕМЕДЛЕННО, прямо при попытке отправки. По крайней мере отправка на несуществующий адрес ТОЧНО приводит к exception'у.
P.S.:ещё один вариант решения - отправка не через специальные компоненты, а напрямую через сокет на 25й порт почтового сервера. Пример работы с SMTP описан здесь http://www.activexperts.com/activemail/telnet/ . Все те же комманды нужно послать из своей программы. Тогда сообщение о несуществующем адресе(и вообще любой ошибке) сможете обработать как захотите.
Dron

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

Dron (статус: Студент), 12 февраля 2008, 15:46 [#7]:

Такое сообщение если и выдаётся, то крайне редко.
Что вы подразумеваете под локальным адресом?
С уважением.
Помфюк Владимир Степанович

Помфюк Владимир Степанович (статус: Абитуриент), 12 февраля 2008, 15:56 [#8]:

локальное: я отправляю с адреса my_addr@domen.addr на other_addr@domen.addr - у нас обеих @domen.addr совпадает. Предполагаемая учётная запись находится на том же сервере что и моя, SMTP сервер может сразу определить существует ли она. Так вот если она не существует - выдаётся такое сообщение.
Почему в других случаях приходит письмо тоже вполне понятно: о несуществовании пользователя на удалённом сервере мой SMTP не знает и не может сообщить немедленно.
Dron

Dron (статус: Студент), 12 февраля 2008, 16:05 [#9]:

Всё логично, со всем согласен.
Но ведь автор вопроса не говорил, что адреса, на которые отправляются сообщения, являются локальными. А значит этот механизм изначально неработоспособен.
С уважением.
Помфюк Владимир Степанович

Помфюк Владимир Степанович (статус: Абитуриент), 12 февраля 2008, 16:15 [#10]:

это единственный вариант, когда несуществующий адрес приводит к немедленной ошибке.
Кроме того какой механизм неработоспособен?
try
except
end
есть всегда.
Прямой диалог с SMTP сервером тоже всегда возможен.

P.S.Мы тут невольно чат устроили. :-) Давайте прекращать .
Dron

Dron (статус: Студент), 12 февраля 2008, 20:11 [#11]:

Я говорю о том, что когда письмо отправляется не на локальный адрес, сервер уже не скажет об ошибке, что такого адреса нет - в этом случае как раз придёт отчёт об ошибке. Отследить этот случай уже невозможно.
Если автору вопроса такой вариант подойдёт - значит адреса действительно локальные.
Да, согласен, что чат :-) Со своей стороны дискуссию считаю закрытой.
С уважением.
Вадим К

Вадим К (статус: Академик), 12 февраля 2008, 23:20 [#12]:

По поводу ответа SMTP сервера. Раньше по стандарту у него можно было спросить, существует ли заданный адрес. Но теперь эту функцию убрали. Если точнее, то сервер может не отвечать на такой запрос, либо отвечать, но с большой задержкой, либо отвечать ответным письмом.
Почему так сделали? Всё банально просто - спамеры.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:49
Выполнено за 0.02 сек.