ADN Open CIS
Сообщество программистов Autodesk в СНГ

28/12/2017

Отправить письмо LISP'ом

Возникла как-то у меня задача - надо было программно сформировать и отправить письмо.

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

Но нет ничего невозможного - гугл в помощь и вперед.

У меня был установлен Outlook 2013, и все было достаточно просто и очевидно:

Код - Auto/Visual LISP: [Выделить]
  1. ;; Сначала определяем необходимые параметры
  2. (setq to      "abc@def.com"
  3.       subject "Заголовок письма"
  4.       body    "Текст письма"
  5.       attach  '("Список добавляемых файлов")
  6.       ) ;_ end of setq

Потом создаем объект письма:

Код - Auto/Visual LISP: [Выделить]
  1. (setq objol   (vlax-get-or-create-object "Outlook.Application")
  2.       objmail (vlax-invoke-method objol 'createitem 0)
  3.       ) ;_ end of setq

И заполняем его параметры:

Код - Auto/Visual LISP: [Выделить]
  1. (vlax-put objmail 'to to)
  2. (vlax-put objmail 'subject subject)
  3. (vlax-put objmail 'body body)
  4. (foreach file attach
  5.   (vl-catch-all-apply 'vlax-invoke (list (vlax-get objmail 'attachments) 'add file))
  6.   ) ;_ end of foreach

Как правило, до этого момента все проходит "на ура". Дальше можно либо отправить письмо

Код - Auto/Visual LISP: [Выделить]
  1. (vlax-invoke objmail 'send)
либо просто его показать
Код - Auto/Visual LISP: [Выделить]
  1. (vlax-invoke objmail 'display :vlax-true)

И вот тут начинается не совсем очевидное и не всегда понятное :)

Если безопасники (ну или IT-шники, неважно) заблокировали возможность отправки письма, то первая конструкция просто не сработает. Придется письмо отображать и потом уже в нем нажимать "Отправить".

Кроме того, отправлять полностью автоматически сформированное письмо иногда не совсем хорошая идея - может понадобиться что-то дополнить, подправить и т.п.

И в первом, и во втором случае остается только отобразить письмо. Казалось бы - ну и что в этом страшного и странного? А то, что лично у меня показ письма просто блокировал AutoCAD. До тех пор, пока окно с письмом не было закрыто (письмо можно сохранить в черновики, сразу отправить, удалить - неважно: окно письма должно быть закрыто!). Так что учтите...

Естественно, потом надо не забыть "отрелизить" (т.е. применить vlax-release-object) и objmain, и objol.



Автор: Алексей Кулик.

Обсуждение: http://adn-cis.org/forum/index.php?topic=8226

Опубликовано 28.12.2017