Елена Филиппова дата публикации 13-09-2000 00:00 'К о м п о н е н т ы' - работа с SMTP-сервером
Рассматриваются некоторые компоненты для решения очень простой и конкретной задачи: работа с SMTP-сервером: рассылка сообщений.
Основным критерием (кроме четкой работы) служил меньший размер исполняемого кода.
Коротко о задаче: "Робот по отправке сообщений по разным условиям". Сообщения только текстовые, то есть attachment не
использовался и в этой части компоненты не тестировались.
Использовались четыре компонента с сервера www.torry.ru.
Раздел VCL страница Internet -> E-Mail и страница Internet -> Packs.
Все компоненты тестировались в одинаковых условиях: Windows NT + Delphi 5
Использовались только те компоненты, которые обеспечивают работу с SMTP-сервером.
TmsSMTPClient
Настройка параметнров SMTP-клиента (почтовый ящик) - адрес и порт сервера, ссылка на компонент-сообщение.
Доступны события OnAddressRejected, OnConnected, OnConnecting , OnDisconnected, OnPreparing, OnSending,
OnSent, OnTransferProgress.
TmsMessage
Непосредственно письмо. В design-time настраиваются практически все параметры, поддерживаются
attacments, СС, BCC, X-Priority и ReturnRecipient (уведомление о даставке).
К недостаткам в моем случае можно было отнести только один момент - увеличение размера приложения примерно на
65К. Причем в обычных приложениях, в которых используется VCL, этот факт скорее всего останется незамеченным.
Больше никаких недостатков или неудобств в использовании Internet Mail Suite v.2.02 я не обнаружила.
Тестировались только те компоненты этой библиотеки, которые необходимы для работы с SMTP-сервером:
TAHMAccountHolder
Коллекция почтовых аккаунтов (почтовых ящиков). Для каждого ящика настраивается
адрес и порт SMTP ( и POP3 )сервера, обратный адрес, login и пароль для доступа к
серверам, требующим авторизации и так далее.
Таких почтовых ящиков в коллекции может быть неограниченное количество. Так заявлено авторами, я тестировала с 20-ю ящиками, проблем не обнаружилось.
Есть только недочет - свойство Default у каждого почтового ящика по умолчанию устанавливается в TRUE, так могут
оказаться дефолтными все 20 ящиков. При посылке сообщений выбирается первый из коллекции ящиков, у которого Default:=TRUE.
Так что тут надо быть внимательными - это потенциальная ошибка.
Компонент никаких событий не обрабатывает.
Очень удобно сделана работа со списком почтовых ящиков в design-time.
TAHMSMTPMail.
Непосредственно письмо - коллекция сообщений. Обязательно указывается ссылка на активный
почтовый ящик из выбранного TAHMAccountHolder, для этого используется схема умолчаний.
Каждое письмо (количество неограничено) имеет соответствующие настройки: attacments (коллекция файлов),
сообщение, тема письма, кому + адрес и от кого + адрес.
Опять-таки, очень удобно сделана работа с этим компонентом в Design-time. Более того, на этапе
разработки можно провести тест настроенных компонентов, то есть, в Design-time отослать
письмо.
Доступны события BeforeExecute, AfterExecute, OnBeforeSend, OnAfterSend, OnConnect, OnDisconnect,
OnEncodeStart, OnEncodeProgress, OnEncodeEnd , OnError, OnExecute, OnSendProgress, OnServerMessage,
OnServerResponse, OnSuccesSend.
К недостаткам можно отнести следующее:
- Довольно большой размер библиотеки, так что в итоге код увеличивается примерно на 70К относительно Mail200 и SakEmail
- Не поддерживается настройка полей X-Priority, CC и BCC.
- Описанная выше ситуация с "ящиком по умолчанию".
Вообще эти компоненты очень просты в изучении, очень удобны в настройке и использовании, но для моей задачи оказались черезчур
громоздки.
Аналогично, использовались два компонента:
TSMTP2000
Настройка одного почтового ящика: адрес и порт SMTP-сервера, поддерживаются настройки PROXY.
В нем же указывается ссылка на компонент-почтовое сообщение TMailMessage.
TMailMessage
Непосредственно письмо. В Design-time можно настроить только поля Name и CharSet.
Все остальные настраиваются и заполняются только в run-time. Таким образом, чтобы разобраться с этими
компонентами, необходимо читать исходники, благо они есть.
Поддерживается посылка attacment-файлов, поля СС и BCC. Текст сообщения может быть отправлен в форматах
PlainText, RTF и HTML.
Работа с SMTP-сервером идет через TClientSocket.
К недостаткам можно отнести то, что не поддерживается поле X-Priority, а из всех возможных событий для обоих компонентов предлагается
только OnProgress. И в исходных кодах, которые
предлагаются автором, есть небольшие "огрехи", которые, впрочем, несложно исправить.
Отсутствие настроек компонентов в Design-time и недостаточная комментированность кода в некоторой степени тоже
может быть отнесена к недочетам, но эту проблему решает подробный пример, который предлагается вместе с компонентами.
В общем компоненты довольно удобны и просты в работе, наличие исходных кодов дает определенную свободу действия,
а так же не сильно увеличивают размер приложения.
Примечание:
Как уже говорилось в начале обзора, в задачу не входит пересылка присоединенных файлов, а
только текстовые сообщения. Но хочется отметить, что
при самом простом тесте на пересылку присоединенных файлов
с Mail2000, файлы стабильно портятся. Из отосланных 113К приходит файл размером 53К и при этом
с испорченным содержимым.
Тестировались только два компонента, которые необходимы для работы с SMTP-сервером:
TSakSMTP
Настройка одного почтового ящика: адрес и порт SMTP-сервера.
Доступны события OnBeforeSend, OnAfterSend, OnConnect, OnConnecting, OnSendTextToSocket, OnRecieveTextFromSocket,
OnError, OnQuit, OnLookUp и OnSendProgress.
Работа с SMTP-сервером идет через TClientSocket.
TSakMsg
Отсылаемое письмо. Практически все поля (кроме attacment) можно настроить в design-time.
Поддерживаются CC, BCC, X-Priority, X-Mailer.
Связка сообщения и почтового ящика происходит в run-time при отсылке письма: SakSMTP1.SendTheMessage(SakMsg1);
К недостаткам можно отнести следующее:
- Невозможно отправить письмо с пустым полем FROM - принудительно генерится исключительная ситуация. Это не надуманная проблема, в реальной задаче рассылки служебных уведомлений принципиально не заполняются поля FROM и REPLY-TO, чтобы не было соблазна на эти письмо ответить.
- При повторном использовании в run-time этих компонент с другими параметрами письма это новое письмо отправляется, полностью игнорируя новые параметры.
Проще говоря, изменив в run-time получателя (тему письма или его текст) и нажав на кнопочку Send второй раз, письмо будет отправлено со всеми старыми значениями.
Примечание:
По словам тех, кто давно использует SakEmail, этот компонент всегда работает корректно с присоединенными
файлами и на передачу и на прием.
Больше всего мне понравился Internet Mail Suite v.2.02, но
моим выбором (только для этой конкретной задачи) стал Mail2000. Почему?
Все просто - никогда не нужно колоть орехи дорогим фотоаппаратом. :о)
Возможно, это не лучшее из того, что в принципе существует на тему SMTP.
Но моя конкретная задача была решена, исходные коды, а значит и свобода действия, в наличии и я прекратила дальнейшие поиски.
[SMTP]
Обсуждение материала нет сообщений |