Довольно часто в процессе работы с электронной почтой возникает мысль о том, что неплохо было бы сделать отправку почтовых сообщений непосредственно из 1С. Сделать это вовсе не трудно. Например, с помощью стандартной внешней v7plus.dll из комплекта поставки любой конфигурации для 1С-Предприятия. Эта компонента содержит кроме всего прочего и набор методов для работы с электронной почтой с помощью MAPI . Это позволяет работать со стандартными почтовыми программами от Microsoft , например Microsoft Outlook или Microsoft Outlook Express . Мне лично больше нравится вторая за счет своей простоты.
Однако не все так просто. Как известно, этот стандартный почтовый клиент, присутствующий на любом компьютере не является эталоном стабильности. В моей практике я столкнулся с тем, что при большом объеме обмена по электронной почте с помощью компоненты v7plus.dll с использованием Microsoft Outlook Express через некоторое время работы возникает ошибка. Она приводит к невозможности отправки сообщения через Microsoft Outlook Express . Связано это с тем, что работа через MAPI очень похожа на работу через OLE . При каждом обращении к функции почтового клиента происходит его инициализация, открытие и выполнение всех необходимых этапов получения либо отправки сообщение. Вот при частом использовании Microsoft Outlook Express и возникает сбой в работе программы, который устраняется только открытием Microsoft Outlook Express вручную.
Также бывает необходимость отправлять письма с одного компьютера с использованием различных учетных записей. При работе с Microsoft Outlook Express нет возможности указать, от какой учетной записи происходит отправка почтового сообщения.
Тут на помощь приходит внешняя компонента для работы с электронной почтой ROM-Mail.dll , предназначенная, в отличие от компоненты v7plus.dll
MAPI, а для работы напрямую с почтовыми серверами с использованием протоколов SMTP и POP3. Эта компонента, кроме того, избавлена от глюков Microsoft Outlook Express или других почтовых программ. Она очень быстро работает, фактически скорость ее работы ограничена только скоростью реакции почтового сервера. В частности, при тестировании ее, я организовывал с помощью функции не для работы через ОбработкаОжидания () проверку почты каждую секунду. В течение суток непрерывной работы ничего страшного ни с компонентой, ни с 1С:Предприятием, ни с почтовыми серверами не случилось (каждую секунду опрашивался не один, а два различных почтовых сервера, находящихся в различных подсетях), разве что администраторы жаловались, что лог POP3 сессий невозможно читать. Таким образом, эту компоненту, можно порекомендовать каждому для удобной отправки и приема почтовых сообщений напрямую с серверов.
Ниже приведен реальный пример работы этих двух компонент в реальных условиях. Для удобства работы и возможности отправки электронной почты из любого места конфигурации, я написал функцию глобального модуля, отправляющую почтовое сообщение по указанному адресу и содержащее указанные вложенные файлы, с возможностью выбора варианта отправки сообщения на один из двух используемых серверов, первый из которых является локальным почтовым сервером, а второй является почтовым сервером глобальной сети.
Для обеспечения отказоустойчивости работы функции для отправки сообщения на локальный сервер используется дублирование: сначала делается попытка отправить сообщение напрямую на сервер с помощью компоненты ROM-Mail.dll , а при неудаче - с помощью внешней компоненты v7plus.dll . Как показала практика, пока функция дублирования не пригодилась….
Теперь рассмотрим механизм отправки и приема сообщений непосредственно.
Для начала рассмотрим механизм инициализации внешних компонент, который показан здесь.
Теперь рассмотрим пример по отправке электронной почты, который показан здесь.
Теперь рассмотрим подробнее процесс получения почты. В моем примере, который будет приведен ниже, будет наглядно продемонстрирован код модуля, отвечающего за прием сообщений. Вкратце процесс приема сообщений выглядит таким образом: в процедуре ОбработкаОжидания () глобального модуля с определенной периодичностью вызывается проверка почты. В моей конкретной конфигурации почту требуется не только получить и обработать, но и сохранить для возможности дальнейшего просмотра пользователем. Для этого наилучшим вариантом будет получение почты с помощью почтовой программы через MAPI с помощью внешней компоненты v7plus.dll . Однако, как мы знаем, вызывать ее часто не рекомендуется. Поэтому процесс получения почты у меня вызывается только тогда, когда на почтовом сервере действительно есть письма. А узнаем мы о наличии писем с помощью внешней компоненты ROM-Mail.dll . Таким образом мы добиваемся сразу многих целей - сохранения устойчивости работы почтовой подсистемы, частой проверки почты на предмет наличия входящих сообщений (у меня - один раз в 5 секунд), а также наличия архива входящих сообщений в почтовом клиенте.
Теперь посмотрим пример приема электронной почты, который показан здесь.
Как мы увидели из примеров, обе компоненты по-своему хороши, и комбинация их иногда может помочь решить самые различные задачи.
Последнюю версию стандартной внешней компоненты v7plus.dll (7.70.0.10) можно взять здесь.
Перепечатка, воспроизведение в любой форме, распространение, в том числе в переводе, любых материалов с сайта www.softpoint.ru возможны только с письменного разрешения компании "СофтПоинт". Это правило действует для всех без исключения случаев, кроме тех, когда в материале прямо указано разрешение на копирование (основание: Закон Российской Федерации "Об авторском праве и смежных правах").
|