96

I use Outlook as my email client at work, but I don't want to use it to manage my tasks and todos. (Instead I use plain text files and Emacs org-mode.) Since many todo items start out as mails in my inbox, I often need to reference these mails.

Is there some clever way to create a link (a URL) that opens a specific email in Outlook when clicked?

0

12 Answers 12

46

You can do this with a little bit of code in Outlook and a little bit of code in Emacs.

First, if you're using Outlook 2007 you'll need to enable Outlook URLs with a registry addition. Instructions and the registry file can be found here courtesy of David Tan.

Next, this macro can be added to Outlook and will get the GUID of the current email message, create a Org-Mode link and deposit it into the clipboard.

'Adds a link to the currently selected message to the clipboard
Sub AddLinkToMessageInClipboard()

   Dim objMail As Outlook.MailItem
   Dim doClipboard As New DataObject

   'One and ONLY one message muse be selected
   If Application.ActiveExplorer.Selection.Count <> 1 Then
       MsgBox ("Select one and ONLY one message.")
       Exit Sub
   End If

   Set objMail = Application.ActiveExplorer.Selection.Item(1)
   doClipboard.SetText "[[outlook:" + objMail.EntryID + "][MESSAGE: " + objMail.Subject + " (" + objMail.SenderName + ")]]"
   doClipboard.PutInClipboard

End Sub

As koushik noted in the comments, the doClipboard.SetText part can be expanded to differentiate between different item types:

If objMail.Class = olMail Then
    doClipboard.SetText "[[outlook:" + objMail.EntryID + "][MESSAGE: " + objMail.Subject + " (" + objMail.SenderName + ")]]"
ElseIf objMail.Class = olAppointment Then
    doClipboard.SetText "[[outlook:" + objMail.EntryID + "][MEETING: " + objMail.Subject + " (" + objMail.Organizer + ")]]"
ElseIf objMail.Class = olTask Then
    doClipboard.SetText "[[outlook:" + objMail.EntryID + "][TASK: " + objMail.Subject + " (" + objMail.Owner + ")]]"
ElseIf objMail.Class = olContact Then
    doClipboard.SetText "[[outlook:" + objMail.EntryID + "][CONTACT: " + objMail.Subject + " (" + objMail.FullName + ")]]"
ElseIf objMail.Class = olJournal Then
    doClipboard.SetText "[[outlook:" + objMail.EntryID + "][JOURNAL: " + objMail.Subject + " (" + objMail.Type + ")]]"
ElseIf objMail.Class = olNote Then
    doClipboard.SetText "[[outlook:" + objMail.EntryID + "][NOTE: " + objMail.Subject + " (" + " " + ")]]"
Else
    doClipboard.SetText "[[outlook:" + objMail.EntryID + "][ITEM: " + objMail.Subject + " (" + objMail.MessageClass + ")]]"    
End If

Almost there, add this little bit of lisp to your emacs lisp directory to enable Outlook links.

;;; org-outlook.el - Support for links to Outlook items in Org

(require 'org)

(org-add-link-type "outlook" 'org-outlook-open)

(defun org-outlook-open (id)
   "Open the Outlook item identified by ID.  ID should be an Outlook GUID."
   (w32-shell-execute "open" (concat "outlook:" id)))

(provide 'org-outlook)

;;; org-outlook.el ends here

And lastly, update your .emacs file to include the Outlook link code. Just add this somewhere after org-mode is setup.

(require 'org-outlook)

Now you can call the macro (I added it to my toolbar in Outlook for quick access) and you can quickly create a link to the email in Emacs.

One gotcha, GUID's change when you move a message between document stores, so if you get the GUID to the message while it's on your Exchange server and then move it to your local PST file the link will change. Move the message before you get the GUID.

11
  • 7
    This is great, thank you! One simplification: I didn't mess with the registry to enable Outlook URLs, instead I just changed the w32-shell-execute call to this: (w32-shell-execute "open" "C:/Programme/Microsoft Office/Office12/OUTLOOK.EXE" (concat "/select " "outlook:" id) Jan 26, 2010 at 15:17
  • 3
    Thanks for this answer. I found out that I somewhat needed to create an empty form to prevent compilation error on undefined DataObject.
    – Laurent'
    Nov 5, 2011 at 13:24
  • @ChristianBerg: I'm using Outlook 2003, so maybe I can have hyperlinks without bothering with the registry, but your simplification did not work, Outlook was unable to find the URL. And every time I clicked on a link in Emacs, a new outlook-process was started. So I sticked to the great solution by user259...
    – Keks Dose
    Jan 26, 2012 at 13:56
  • 1
    I "scratched this itch" of mine a bit more as I had to record links to some appointments for working on related items (so I can refer ot info / attachments therein or reply all when I have updates etc). Now this can export mails, calendar items, contacts, notes, journal entries and at least will not fail when invoked on other entries. The modified code is at pastebin.com/gNWLVNRk (I can provide a diff if it would help - though I don't know how to make on in VBA). I didn't have to make any other change (emacs-side or regsitry) for this to work on my end. HTH.
    – koushik
    Jul 23, 2012 at 13:50
  • 5
    To solve the DataObject type error, the following worked for me. In the macro editor, go to Tools->References. Click browse, select the file C:\Windows\System32\fm20.dll and press OK. May 9, 2019 at 18:40
8

I solved this by writing a simple vbscript (download):

Set Outlook = CreateObject("Outlook.Application")
Set SelectedItem = Outlook.ActiveExplorer.Selection.Item(1)
Set Shell = CreateObject("Shell.Application")
Shell.ShellExecute "cmd", "/c echo Outlook:" & SelectedItem.entryID & " | clip", "", "runas", 1

It copies a link of the element (Email, Calendar entry, ...) you have currently selected in Outlook to your clipboard:

Outlook:176CZREX7A79L9TG1T0AJ6HQ8DEBLTFS60HUQYKT2IXBBZ9ZZVA73MNRYVRWRL4RY0VCPQE1IB5GAWY0D8OSMOB4IFDV5OMG9NX2BBKGFA3IWSD62UCNVK0HD9GA80BIDZSBCZL7INCT

You can even use a redirection service so that you get a HTTP link (because Outlook: links are probably not detected automatically if you paste is somewhere, but HTTP links are) (download), just replace the last line with:

Shell.ShellExecute "cmd", "/c echo https://api.fnkr.net/goto/jsclient/raw/?closeAfter=500#Outlook:" & SelectedItem.entryID & " | clip", "", "runas", 1

Note that you need to make Outlook: links working first.
http://www.slipstick.com/problems/outlook-missing-outlook-protocol/ (scroll down to "Do It For Me")

Tested with Outlook 2010.

1
  • Issue with entryId is it doesn't work after moving the mail
    – Fennekin
    Feb 21, 2022 at 4:17
4

I don't have sufficient reputation credits to put in a comment to the accepted answer above, but I wanted to put a cross-reference in for a revision to the excellent answer provided by @user25995 - which I posted at (emacs) StackExchange.

Based on a comment I received to a question I posted there, I changed the use of (deprecated) org-add-link-type to org-link-set-parameters and included an export: function so that the HTML export backend gave me a properly formatted <a href="outlook:..."> link type.

2
  • Commentary shouldn't be submitted as an answer because of your inability to submit an actual comment.
    – Ramhound
    Oct 4, 2017 at 15:53
  • 8
    @Ramhound - I took pains to point to the accepted answer, even by providing a link and acknowledging the author. I then offered a small revision that avoids the use of a function that is now deprecated. I did not intend to breach protocol here - is there a correct way to communicate this if I don't have enough Brownie points to comment on the accepted answer?
    – kwoodham
    Oct 4, 2017 at 18:22
3

came across Linker applet.going to try it out..you may want to as well http://www.teamscope.com/otherpro/utilities.asp#linker

Here's the marketing drible..

Linker™ for Windows® creates hyperlinks to items and folders in Outlook, and to files and folders in Windows Explorer. It is a system tray applet places the hyperlink in the Windows clipboard. The hyperlink can then be pasted into any Microsoft Office document, web page, e-mail message, or any document that supports hyperlinks.

Greetings from sunny South Africa!

2
  • Linker works sometimes, other times not so much. Overall feels quite buggy in Win 7 + Outlook 2010
    – Andy
    Jan 15, 2014 at 19:00
  • Using Office Pro Plus 2016 + Win 10 Pro, and it did not work. It breaks when accessing the links that had been copied - so when clicking \\<email address>\Drafts\~test , the unknown app is pick up by win 10 so it breaks. Jul 30, 2018 at 4:06
3

You can copy an Outlook e-mail to OneNote (comes in as a yellow letter icon), then right click and select 'link to paragraph', and then paste the link into another document that can work with links.

But anyway, Microsoft should have made this whole thing of linking to an e-mail a standard feature. It was such a useful feature of Lotus Notes.

1
  • It's a useful feature. But, what's the security model? Do you want a bad guy to send you a link in an email that you might open by accident? GUIDs, sure, not visible outside - unless they leak...
    – Krazy Glew
    Apr 9, 2019 at 4:34
1

I'm not sure about referencing a specific email but depending on your system you might be able to copy the email to the same location as the todo item. Just drag/drop the mail to a folder or the desktop and it will create a copy of the mail that you can treat as a normal file.

If you would be using .doc or more "advanced" files than .txt you could then link to this Outlook message file.

1
  • 1
    I'll go with that solution. Here's my new workflow: Drag the mail to a temporary folder. Create the todo item in org-mode. Add the message file as an attachment to the item: C-c C-a m (the message file is moved to the attachments folder). Later I can open the message from the todo item by pressing C-c C-a o. Nov 18, 2009 at 16:07
1

I prefer to copy the Outlook Item content to the system clipboard and then yank it into an Org-mode note.

http://www.emacswiki.org/emacs/PlannerModeContrib#toc10

0

Not without some kind of custom code. The Outlook URI's can get you to the containing folder within Outlook, but that's about it. You would need to come up with a clever filing strategy that aligned with your linking strategy to get more granular.

1
  • 1
    Other answers show it's possible, hence the downvote. Aug 22, 2019 at 23:40
0

Probably your requirement is different with mine.

Outook 2013 > Message Tab(your normal view) > 'Actions' Button > View in Browser

Then I get that link from the browser.

Hope that help

1
  • 2
    This seemed promising but in Outlook 2013 for me this creates a .mht file in AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook` and opens that in IE using a 'mhtml:file://.. url so no go. Jan 5, 2015 at 17:30
0

I use Wunderlist to manage my tasks and found that with the Wunderlist add-in for Outlook I can create new tasks directly from an email message and Wunderlist automatically creates a link in the task notes to the original message. A few things to keep in mind:

  1. I always move the message to a folder first because (last time I checked) the URL breaks if you later move the message to another folder.
  2. Even though there is an add-in for Outlook desktop, it doesn't seem to include the link, so I use Outlook on the Web when I want to create a task.
  3. I have only tried this with Outlook on the Web for Office 365 using a corporate email account. I assume it works equally well with consumer Office 365 accounts, but haven't tried it.
  4. Even if you don't use Wunderlist, you could sign-up and use it to generate the URL when you need it.

And just for disclosure, I do work for Microsoft, though I'm not associated with either the Outlook or Wunderlist teams.

3
  • 1
    Please read the question again carefully. Your answer does not answer the original question. OP is using emacs.
    – DavidPostill
    Sep 14, 2016 at 21:53
  • 2
    @DavidPostill Respectfully, I thought I did. That's why I included #4 as a way to obtain a URL to a message that can then be stored anywhere, including in a text file.
    – AJSkew
    Sep 14, 2016 at 23:31
  • 1
    This answer is old and Wunderlist no longer exists May 17, 2022 at 8:04
0

In the web app (Office 365) you can right-click the message and create task/to-do. Then in the task you can right-click and get the embedded link to the message. See related answer linked below for more detail:

Link to Microsoft Outlook 365 Webmail email

0

I have found a relatively non-technical work around for this question after a lot of trial and error. I save alot of emails in OneNote, and in older versions of One Note, you can drag and drop specific emails to be saved on the page. But this isn't possible in OneNote 365 (to my knowledge).

However, I have found that I can save a print out of the email in OneNote, and then copy and paste the hyperlink to the specific email in the outlook webmail interface. However, the trick/work-around as far as I can tell, is that the email CANNOT be still in the inbox, but must have been moved to a different folder. If it remains in the inbox when you copy-and-paste the hyperlink, when you click on it, it will just open the inbox, instead of opening the specific email you want. This works for me in both Chrome and Edge, I hope others also find it useful.

2
  • 1
    Welcome to Super User! Please do not post the same answer to multiple questions. If the same information really answers both questions, then one question (usually the newer one) should be closed as a duplicate of the other. You can indicate this by voting to close it as a duplicate or, if you don't have enough reputation for that, raise a flag to indicate that it's a duplicate. Otherwise tailor your answer to this question and don't just paste the same answer in multiple places.
    – DavidPostill
    Jul 25, 2021 at 7:36
  • Welcome to Super User! Please do not post the same answer to multiple questions. If the same information really answers both questions, then one question (usually the newer one) should be closed as a duplicate of the other. You can indicate this by voting to close it as a duplicate or, if you don't have enough reputation for that, raise a flag to indicate that it's a duplicate. Otherwise tailor your answer to this question and don't just paste the same answer in multiple places.
    – DavidPostill
    Jul 25, 2021 at 7:36

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .