Отправить письмо через 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.
attach '("Список добавляемых файлов")
В каком формате список?
Пробовал с путями и без путей
2016 аутглюк у меня
Да в обычном, по типу
'("c:\\folder\\file1.txt" "d:\\folder2\\file2.dwg")
И т.д.
Кстати, а вообще объекты objol и objmail создаются?