Отправить письмо через LISP

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

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

Но нет ничего невозможного - гугл в помощь и вперед.
У меня был установлен Outlook 2013, и все было достаточно просто и очевидно:

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

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

1
2
3
(setq objol   (vlax-get-or-create-object "Outlook.Application")
      objmail (vlax-invoke-method objol 'createitem 0)
      ) ;_ end of setq

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

1
2
3
4
5
6
(vlax-put objmail 'to to)
(vlax-put objmail 'subject subject)
(vlax-put objmail 'body body)
(foreach file attach
  (vl-catch-all-apply 'vlax-invoke (list (vlax-get objmail 'attachments) 'add file))
  ) ;_ end of foreach

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

1
(vlax-invoke objmail 'send)

либо просто его показать

1
(vlax-invoke objmail 'display :vlax-true)

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

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

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

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

Размещено в AutoCAD, Код LISP, Функции LISP · Метки: ,



Комментарии

Есть 3 коммент. к “Отправить письмо через LISP”
  1. Евгений пишет:

    attach '("Список добавляемых файлов")

    В каком формате список?
    Пробовал с путями и без путей

    2016 аутглюк у меня

  2. Кулик Алексей aka kpblc пишет:

    Да в обычном, по типу
    '("c:\\folder\\file1.txt" "d:\\folder2\\file2.dwg")
    И т.д.

  3. Кулик Алексей aka kpblc пишет:

    Кстати, а вообще объекты objol и objmail создаются?

Поделитесь своим мнением


Я не робот.