Отправка почты из Navision так, чтобы она осталась в почтовом клиенте

В организации используются в качестве почтового клиента Outlook и TheBat. Возникла необходимость отправлять почту так, что бы она оставалась в почтовом клиенте у конкретного пользователя, отправляющего почту из Navision. При этом немаловажным фактором является то, что нужно подключать аттачменты.

Порывшись в интернете я понял, что для этого можно использовать протокол MAPI который поддерживают как Outlook так и TheBat.

Ниже приведен код:

EMail_Отправить
(
  Получатель : Text[100];
  Заголовок : Text[150];
  Сообщение : Text[500];
  VAR СписокФайлов : TEMPORARY Record "Коды Резервов"
)
//***********************************
// Отправка почтового сообщения с несколькими файлами
//  параметры
//     Получатель - email получателя
//     Заголовок  - заголовок почтового сообщения
//     Сообщение  - почтовое сообщение. Может быть HTML.
//     СписокФайлов - временая таблица со списком передаваемых файлов.
//     "СписокФайлов.Описание" - полный путь и имя файла
//
//  !!!! Navision будет недоступен до момента отправки сообщения из почтовой программы.
//       В случае отмены отправки сообщения будет выдано сообщение об ошибке.
//****************************
//Локальные переменные
// mapiSession  OCX Microsoft MAPI Session Control, version 6.0
// mapMess  OCX Microsoft MAPI Messages Control, version 6.0   
// AttchInd Integer номер передаваемого в аттачменте файла   
//
mapiSession.DownLoadMail:=FALSE;
mapiSession.LogonUI:=TRUE;

mapiSession.SignOn;

mapMess.SessionID:=mapiSession.SessionID;
mapMess.MsgIndex:=-1;
mapMess.Compose;
mapMess.RecipType:=1;
mapMess.RecipAddress:=Получатель;
mapMess.MsgSubject:=Заголовок;
mapMess.MsgNoteText:=Сообщение;

AttchInd:=0;
IF СписокФайлов.FINDSET THEN
BEGIN
REPEAT
  mapMess.AttachmentType := 0;
  mapMess.AttachmentIndex := AttchInd;
  mapMess.AttachmentPathName:=СписокФайлов.Описание;
  mapMess.AttachmentPosition := AttchInd;

  AttchInd+=1;
UNTIL СписокФайлов.NEXT=0;
END;

mapMess.Action:=2;

mapiSession.SignOff;

/////////////////

В параметрах передается все необходимое для формирования почтового сообщения. Во временной таблице СписокФайлов в поле Описание указан полный путь к файлу и его имя. На момент формирования сообщения файл должен существовать на диске.

Сообщение может быть в виде HTML, что позволит придать письму более презентабельный вид.

mapiSession
– это объект для управления подключением к почтовому клиенту через протокол MAPI. Поле SessionID будет содержать номер сеанса подключения. DownLoadMail:=FALSE для того чтобы при подключении не закачивалась почта с сервера. LogonUI:=TRUE будет требовать регистрации пользователя в почтовом клиенте, иначе Вам нужно будет знать имя и пароль пользователя при подключении почтового клиента и прописать это в коде.

mapiSession.SignOn инициирует подключение.

mapMess – это объект для работы с почтовым сообщением. Код для формирования сообщения достаточно простой и не требует комментариев. Присваивая Action значение, Вы инициализируете выполнение тех, или иных действий у почтового клиента.

В данном случае Action:=2, что означает появление окна редактирования почтового сообщения и пользователь сам принимает решение отправлять почту или нет. К сожалению, до момента пока пользователь не отправит почту, клиент Navision будет заблокирован. Хотя с другой стороны это предотвращает желание создавать массовые рассылки. Но главное, что бы в момент формирования сообщения, Вы не начали транзакцию в Navision, иначе возникнет блокировка до тех пор, пока пользователь не отреагирует. Если пользователь откажется сохранять/отправлять сообщение — Navision выдаст ошибку. Почему непонятно, побороть я это не смог. Очередная «особенность» Navision. Вот если бы в языке была предусмотрена обработка ошибок… Ну имеем то, что имеем.

Есть возможность отправлять почту сразу без участия пользователя (Action:=3). Однако я считаю, что в этом случае лучше пользоваться SMTP протоколом и работать сразу с сервером почты…

mapiSession.SignOff – завершает сеанс и освобождает ресурсы.

Ниже приведена процедура для отправки одного файла, т.к. это наиболее часто востребованная функция.

EMail_ОтправитьФайл(Получатель : Text[100];Заголовок : Text[150];Сообщение : Text[500];Файл : Text[250])
// Локальная переменная
// ВремСписок Record  Коды Резервов
//
ВремСписок.INIT;
ВремСписок.Код:='1';
ВремСписок.Описание:=Файл;
ВремСписок.INSERT;
EMail_Отправить(Получатель,Заголовок,Сообщение,ВремСписок);
////////

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

Так же при настройке почтового клиента, устанавливая, что почтовый клиент должен работать с протоколом MAPI у пользователя должны быть права администратора, т.к. почтовый клиент может менять библиотеки MAPI в системном каталоге Windows.

На сайте «Первые шаги — Элементы управления MAPI» можно посмотреть более детальное описание элементов управления MAPI или смотрите MSDN.

Используя MAPI можно обрабатывать почту не только для отправки сообщений, но и для приема.

Автор:

Количество статей, опубликованных автором: 5. Дополнительная информация об авторе появится вскоре.

Добавить комментарий