Шаг 48.
Компонент TNMSMTP

    На этом шаге мы рассмотрим компонент TNMSMTP.

    Компонент TNMSMTP позволяет отправлять электронную почту через почтовый Интернет-сервер.

    Этот компонент использует для отправки почты стандартный протокол SMTP (Simple Mail Transfer Protocol - простой протокол отправки почты). Порт используемый этим протоколом, - 25. Регистрация на многих SMTP-серверах при подключении не требуется, соответственно вводить имя пользователя при работе с такими серверами не требуется. Для работы с компонентом необходимо установить соединение с сервером. Для этого нужно задать значения свойствам Host и Port и вызвать метод Connect. По окончании работы с сервером вызывается метод Disconnect, который завершает установленное ранее соединение.

    Главное свойство этого компонента - PostMessage. Именно в нем помещается вся информация отправляемого сообщения. Это свойство имеет много полей, но обязательными для заполнения являются только два поля: адрес получателя ToAddress типа TStringList и адрес отправителя FromAddress типа String. В поле получателя можно записать несколько адресов получателя. Сам текст письма помещается в свойство Body типа TStringList. В строковые поля Subject, FromName и Organization записываются тема письма, имя отправителя и название организации. Поле Attachments типа TStringList используется для указания списка вложенных файлов. Дополнительно к основной задаче отправки почты компонент имеет два метода, с помощью которых можно проверить существование на сервере пользователя с указанным именем и получить от сервера список адресов листа рассылки. Первый метод - это Verify. Под именем пользователя понимается электронный адрес. Некоторым серверам достаточно указать только начальную часть адреса - до символа "@", для других нужно указывать полный адрес. Если указанный адрес существует, то функция Verify возвращает True, если не существует - то False.

    Имя второго метода - ExpandList. После вызова этого метода генерируется событие OnMailListReturn, в обработчике которого можно просмотреть полученный список адресов.

    Далее рассмотрим свойства компонента.

    В свойстве ClearParams задается режим очистки или сохранения значений в свойстве PostMessage после того, как сообщение отправлено. Если свойству присвоено значение True, то после вызова метода SendMail поля свойства PostMessage очищаются. Если в свойстве ClearParams задано False, то значения, записанные в свойстве PostMessage, сохраняются. Значение по умолчанию - True.

    Свойство EncodeType определяет тип кодирования присоединяемых к письму файлов, который использует компонент TNMSMTP. Возможен выбор только из двух значений: uuMime, если применяется метод MIME, и uuCode, которому соответствует метод UUEncode. По умолчанию используется метод MIME.

    В свойстве FinalHeader помещается окончательный вариант заголовка для приготовленного к отправке письма. Это свойство можно просмотреть или изменить с помощью события OnSendStart.

    В свойстве PostMessage записываются все необходимые элементы письма: адрес получателя и отправителя, тема письма и т.д. Нужно помнить, что если свойство ClearParams выставлено в True, то по завершении работы метода SendMail свойство PostMessage очищается.

    В свойстве SubType определяется тип отсылаемого электронного сообщения. Например, если указать в свойстве SubType значение mtHTML, то программа просмотра писем у адресата будет знать, что получила документ HTML, и будет пытаться адекватно работать с документом - не выводить теги HTML на экран как текст, а работать с ними как с управляющими последовательностями. Значение по умолчанию - mtPlain. Свойство может принимать одно из следующих значений:

    В свойстве UserID задается имя пользователя для регистрации на сервере SMTP. He все серверы проверяют UserID, но многие делают это. Если сервер проверяет имя отправителя, а оно не указано, то будет генерироваться событие OnAuthenticationFailed.

    Далее перейдем к рассмотрению методов компонента.

    Метод ExpandList используется для получения содержимого списка адресов на сервере SMTP. В параметре MailList задается имя интересующего вас списка. Когда сервер SMTP возвращает требуемый список, происходит событие OnMailListReturn.

    Метод ExtractAddress выделяет адрес электронной почты из строки текста. Обычно этот метод используется для внутреннего употребления, хотя он имеет доступ public и, соответственно, доступен всем. Строка передается через параметр, а выделенный адрес возвращается методом. Для выполнения метода ExtractAddress соединения с сервером SMTP не требуется.

    Метод Verify используется для проверки существования пользователя на сервере SMTP.

    Метод ClearParameters удаляет содержимое свойства PostMessage. При этом очищаются поля ТоAddress, ToCarbonCopy, ToBlindCarbonCopy и Attachments. Для удаления содержимого поля Body, т.е. самого текста письма, необходимо вызвать метод PostMessage.Body.Clear. Если свойство ClearParams имеет значение True, то после каждого выполнения метода SendMail автоматически вызывается метод ClearParameters.

    Метод SendMail выполняет отправку электронного письма, заданного в полях свойства PostMessage. Если в свойстве ClearParams прописано значение True, то после отправки письма вызывается метод ClearParameters. Непосредственно перед отправкой сообщения происходит событие OnSendStart. Можно использовать эту возможность для внесения последних изменений в отправляемое письмо. После успешной отправки сообщения генерируется событие OnSuccess. Если же при передаче сообщения на сервер вышла ошибка, происходит событие OnFailureEvent.

    Последними рассмотрим события компонента.

    Событие OnAttachmentNotFound генерируется, если не находится файл, который должен быть присоединен к отправляемому письму. Событие имеет параметр TFileItem, в котором указано имя отсутствующего файла.

    Событие OnAuthenticationFailed наступает, если работа ведется с сервером, на котором нужно регистрироваться, а в свойстве UserID указано неверное имя или вообще не задано никакого значения. Метод дает возможность исправить это положение. Если параметр Handled имеет значение True, то пользователь имеет возможность указать UserID еще раз, после чего имя отсылается на сервер. Если и вторая попытка заканчивается неудачей, то возбуждается исключительная ситуация, и соединение обрывается. Если значение параметра Handled равно False (значение по умолчанию), то разрыв соединения происходит при первой неудачной попытке отправить письмо.

    Событие OnEncodeEnd генерируется, когда присоединяемый к письму файл закодирован и приготовлен к отправке. Поскольку событие относится к типу TFileItem, то имя закодированного файла передается через параметр.

    Событие OnEncodeStart происходит перед началом кодирования присоединяемого к письму файла. Поскольку событие относится к типу TFileItem, то имя кодируемого файла передается через параметр. Событие ОnFailure генерируется, если отправка сообщения завершилась с ошибкой, и сообщение не было отправлено.

    Событие OnHeaderIncomplete происходит, если остались не заполненными следующие свойства из свойства PostMessage: свойство FromAddress или ни одно из следующих свойств - ToAddress, ToCarbonCopy или ToBlindCarbonCopy.

    Событие относящееся к типу THeaderInComplete, является модификацией типа THandlerEvent и в добавление к параметру Handled типа boolean имеет еще один параметр целого типа hiТуре. Этот последний параметр указывает номер незаполненного поля и может принимать следующие значения:

    Если у параметра Handled значение True, то попытка отправить сообщение повторяется. Если и после второй попытки одно из требуемых полей оказывается незаполненным, возбуждается исключительная ситуация, и сообщение не посылается, хотя работа с ним продолжается, и вы можете еще раз попытаться его отправить. Если параметр Handled имеет значение False, то сообщение не отсылается, и возбуждается исключительная ситуация.

    Событие OnMailListReturn наступает, когда метод ExpandList получает от почтового сервера список адресов. Список передается обработчику события через параметр.

    Событие OnRecipientNotFound происходит, если не найден один из получателей сообщения, указанный в одном из полей ToAddress, ToCarbonCopy или ToBlindCarbonCopy. Событие получает ошибочный адрес в качестве значения своего параметра.

    Событие OnSendStart генерируется непосредственно перед отправкой электронного сообщения. Событие дает последнюю возможность внести в письмо какие-либо изменения.

    Событие OnSuccess генерируется после того, как сообщение успешно доставлено. Если сообщение не доставлено, то в этом случае наступает событие OnFailure.

    На следующем шаге мы рассмотрим пример использования этого компонента.




Предыдущий шаг Содержание Следующий шаг