Безопасность в Дельфи

         

А р с е н а л ь н а я б а ш н я


К о м п о н е н т ы
Рассматриваются некоторые компоненты для решения очень простой и конкретной задачи: работа с SMTP-сервером: рассылка сообщений. Основным критерием (кроме четкой работы) служил меньший размер исполняемого кода.
Коротко о задаче: "Робот по отправке сообщений по разным условиям". Сообщения только текстовые, то есть attachment не использовался и в этой части компоненты не тестировались. Использовались четыре компонента с сервера www.torry.ru. Раздел VCL страница Internet -> E-Mail и страница Internet -> Packs.
Все компоненты тестировались в одинаковых условиях: Windows NT + Delphi 5
Название Internet Mail Suite v.2.02
URL Раздел VCL страница Internet -> Packs
http://www.torry.ru/internetpacks.htm
http://www.torry.ru/vcl/internet/packs/imsd4.zip
Распространение Коммерческий; Trial (work while IDE is running)
IDE Delphi 1,2,3,4; CBuilder 1,3; У меня работал в 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 я не обнаружила.
Название AHM E-Mail Components Triton 2000 v.2000
URL Раздел VCL страница Internet -> E-Mail
http://www.torry.ru/email.htm
http://www.torry.ru/vcl/internet/email/ahmmail.zip
Распространение Коммерческий; Evaluation (time-limit)
IDE Delphi 3,4,5; CBuilder 3 ,4 ,5;
Тестировались только те компоненты этой библиотеки, которые необходимы для работы с 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.
  • Описанная выше ситуация с "ящиком по умолчанию".
Вообще эти компоненты очень просты в изучении, очень удобны в настройке и использовании, но для моей задачи оказались черезчур громоздки.
Название Mail2000 v 1.2
URL Раздел VCL страница Internet -> E-Mail
http://www.torry.ru/email.htm
http://www.torry.ru/vcl/internet/email/mail2000.zip
Распространение Данный компонент является бесплатным и распространяется с исходниками.
IDE Delphi 4. (У меня работало в Delphi 5)
Аналогично, использовались два компонента:

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К и при этом с испорченным содержимым.

Название SakEmail v.3.0.1
URL Раздел VCL страница Internet -> E-Mail
http://www.torry.ru/email.htm
http://www.torry.ru/vcl/internet/email/sakemail.zip
Распространение Данный компонент является бесплатным и распространяется с исходниками.
IDE Delphi 3,4,5.
Тестировались только два компонента, которые необходимы для работы с 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. Но моя конкретная задача была решена, исходные коды, а значит и свобода действия, в наличии и я прекратила дальнейшие поиски.

Елена Филиппова

Основная страница | Свитки | Сокровищница | Подземелье Магов | Hello, World! | Арсенальная башня |



Содержание  Назад  Вперед