Pull to refresh

Как хранить ссылки на письма Outlook

Если вы помните поступающие письма и вам вполне хватает штатных средств 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:
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
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.