Работа с электронной почтой   

   

Довольно часто в процессе работы с электронной почтой возникает мысль о том, что неплохо было бы сделать отправку почтовых сообщений непосредственно из 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 возможны только с письменного разрешения компании "СофтПоинт". Это правило действует для всех без исключения случаев, кроме тех, когда в материале прямо указано разрешение на копирование (основание: Закон Российской Федерации "Об авторском праве и смежных правах").

 

Статья: Работа с электронной почтой

Перейти на главную страницу компании "Софтпоинт"