Если вы помните поступающие письма и вам вполне хватает штатных средств Microsoft Outlook для их классификации, то этот пост не для вас, потому что речь пойдет о том, как можно запоминать ссылки на сообщения и хранить их в любом документе, например в MS Project, MS Word, MS Visio или даже просто в комментариях программы для того, что бы в любой момент можно было открыть исходное сообщение парой нажатий.
Поискав по интернету инструменты с нужным функционалом я не нашел ничего достаточно удобного для работы с Outlook. Пробовал рассовывать письма по папкам, помечать категориями, сохранять, вкладывать и тд и тп. Имея несколько десятков задач и несколько десятков писем по каждой задаче постоянно приходилось полагаться на память, но после нескольких переключений в день между задачами память переполнялась, мозг бунтовал. Беспорядок в голове рос и к концу недели мозг перегревался. Усугублялось это огромными запутанными глыбами чужого кода и тупыми процессами микроменеджмента на проекте. Каждая задачка сопровождалась примерно двадцатью пунктами анализа, согласования, пропихивания, тестирования, откатов, накатов и тд. и тп. Только не спрашивайте в какой конторе и на каком проекте это происходит. Примерно 100 человек и 20 млн строк кода после 20 лет развития могут довести любой проект до состояния ползущего хаоса, который поглотит того, кто захочет с ним бороться. Как говорил один поэт «покой нам только снится».
Тогда я придумал простой способ как облегчить навигацию по информационному потоку. Для начала стал вести учет задач в более-менее удобной среде (в моем случае oneNote) и сохранять ссылки на сообщения в карточке к задаче, что бы можно было их быстро открывать и отвечать. Каждое сообщение в outlook имеет свой уникальный EntryID и есть COM API, позволяющее получать его и открывать письмо. EntryID можно считать постоянным, если не перемещать письмо из папки в папку или в бакап.
Предоставляю для рассмотрения многоуважаемых читателей 2 VBS скрипта, которые позволяют получить EntryID и переходить в письмо по нему.
Алгоритм действия такой:
I. получение EntryID
1) Открыть outlook.
2) Встать на письмо.
3) 3апустить getOulookEntryID.vbs. EntryID будет помещен в буфер обмена и копия письма будет сохранена в папку c:\temp\.
4) Вставить EntryID в текст (Ctrl-V), где вы хотите сохранить «ссылку», например в MS Word.
Пример EntryID:
II. переход по EntryID
1) Скопировать EntryID в буфер обмена.
2) Запустить go_OutlookEntryID.vbs.
3) Вставить его в окно ввода.
4) Нажать Ок. Будет произведен сначала поиск письма в Outlook, а если не найдется, то в папке c:\temp\
К недостаткам данного подхода можно отнести то, что он будет работать для одного пользователя, то есть нельзя обмениваться «ссылками» на письма.
С помощью нехитрых манипуляций можно сделать запуск скриптов по комбинации клавиш. Ниже приведен пример скрипта AutoHotKey, в котором комбинация Control-Alt-C копирует в буфер, а Control-Alt-G производит переход по EntryID содержащемся в буфере.
Поискав по интернету инструменты с нужным функционалом я не нашел ничего достаточно удобного для работы с Outlook. Пробовал рассовывать письма по папкам, помечать категориями, сохранять, вкладывать и тд и тп. Имея несколько десятков задач и несколько десятков писем по каждой задаче постоянно приходилось полагаться на память, но после нескольких переключений в день между задачами память переполнялась, мозг бунтовал. Беспорядок в голове рос и к концу недели мозг перегревался. Усугублялось это огромными запутанными глыбами чужого кода и тупыми процессами микроменеджмента на проекте. Каждая задачка сопровождалась примерно двадцатью пунктами анализа, согласования, пропихивания, тестирования, откатов, накатов и тд. и тп. Только не спрашивайте в какой конторе и на каком проекте это происходит. Примерно 100 человек и 20 млн строк кода после 20 лет развития могут довести любой проект до состояния ползущего хаоса, который поглотит того, кто захочет с ним бороться. Как говорил один поэт «покой нам только снится».
Тогда я придумал простой способ как облегчить навигацию по информационному потоку. Для начала стал вести учет задач в более-менее удобной среде (в моем случае oneNote) и сохранять ссылки на сообщения в карточке к задаче, что бы можно было их быстро открывать и отвечать. Каждое сообщение в outlook имеет свой уникальный EntryID и есть COM API, позволяющее получать его и открывать письмо. EntryID можно считать постоянным, если не перемещать письмо из папки в папку или в бакап.
Предоставляю для рассмотрения многоуважаемых читателей 2 VBS скрипта, которые позволяют получить EntryID и переходить в письмо по нему.
Алгоритм действия такой:
I. получение EntryID
1) Открыть outlook.
2) Встать на письмо.
3) 3апустить getOulookEntryID.vbs. EntryID будет помещен в буфер обмена и копия письма будет сохранена в папку c:\temp\.
4) Вставить EntryID в текст (Ctrl-V), где вы хотите сохранить «ссылку», например в MS Word.
Пример EntryID:
00000000AF0F0E71CF4D804B953CAD71F7D0FE10070091A9B565E96948409FF4B9D65B56D61D000000F18F4B00002CD50EEAE420FF448C4569721C1077FD005A3D14861A0000
II. переход по EntryID
1) Скопировать EntryID в буфер обмена.
2) Запустить go_OutlookEntryID.vbs.
3) Вставить его в окно ввода.
4) Нажать Ок. Будет произведен сначала поиск письма в Outlook, а если не найдется, то в папке c:\temp\
'getOulookEntryID.vbs
set oApp = CreateObject("Outlook.Application")
Set oExp = oApp.ActiveExplorer
Set oSel = oExp.Selection
'находим текущее письмо
For i = 1 To oSel.Count
Set oItem = oSel.Item(i)
' Subj = oItem.Subject
id=oItem.EntryID
exit for
Next
' копируем EntryID в буфер обмена
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /c echo " & id & "| clip", 0, TRUE
MsgBox "Copied to clipboard:" & ID
' сохраняем на диск для случая, если EntryID изменился в результате переноса письма в другую папку
oItem.SaveAs "c:\temp\" & id & ".msg", 2
'go_OutlookEntryID.vbs
set App = CreateObject("Outlook.Application")
set NS = App.GetNamespace("MAPI")
NS.Logon
if WScript.Arguments.count=0 then
id = InputBox("Enter outlook EntryID") ' получить от пользователя
else
id = WScript.Arguments.Item(0) ' получить из командной строки
end if
id = replace(id,chr(10),"") ' убираем возможные артефакты буфера обмена
id = replace(id,chr(13),"")
id = trim(id)
On Error resume next
set Msg = NS.GetItemFromID(id)
On Error GoTo 0
if isEmpty(Msg) Then
' если письмо было перемещено, то его EntryID изменился, пытаемся найти его на диске
msgBox "Open from disk"
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "c:\temp\" & id & ".msg", 0, TRUE
else
' окрываем из Inbox
Msg.Display
end if
К недостаткам данного подхода можно отнести то, что он будет работать для одного пользователя, то есть нельзя обмениваться «ссылками» на письма.
С помощью нехитрых манипуляций можно сделать запуск скриптов по комбинации клавиш. Ниже приведен пример скрипта AutoHotKey, в котором комбинация Control-Alt-C копирует в буфер, а Control-Alt-G производит переход по EntryID содержащемся в буфере.
^!c::
Run, "с:\getOulookEntryID.vbs"
return
^!g::
Run, "с:\go_OutlookEntryID.vbs" %clipboard%
return