我可以在 Outlook 中创建指向特定电子邮件的链接吗?

Chr*_*erg 83 microsoft-outlook email url emacs org-mode

我在工作时使用 Outlook 作为我的电子邮件客户端,但我不想用它来管理我的任务和待办事项。(相反,我使用纯文本文件和 Emacs 组织模式。)由于许多待办事项最初是我收件箱中的邮件,我经常需要参考这些邮件。

是否有一些聪明的方法来创建一个链接(一个 URL),当点击它时在 Outlook 中打开特定的电子邮件?

小智 42

您可以使用 Outlook 中的一些代码和 Emacs 中的一些代码来完成此操作。

首先,如果您使用的是 Outlook 2007,则需要通过注册表添加启用 Outlook URL。说明和注册表文件可在此处由 David Tan 提供。

接下来,可以将此宏添加到 Outlook 并获取当前电子邮件的 GUID,创建 Org-Mode 链接并将其存入剪贴板。

'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
Run Code Online (Sandbox Code Playgroud)

正如koushik在评论中指出的那样,该doClipboard.SetText部分可以扩展以区分不同的项目类型:

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
Run Code Online (Sandbox Code Playgroud)

差不多了,将这一点点 lisp 添加到您的 emacs lisp 目录以启用 Outlook 链接。

;;; 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
Run Code Online (Sandbox Code Playgroud)

最后,更新您的 .emacs 文件以包含 Outlook 链接代码。只需在设置 org-mode 后将其添加到某处即可。

(require 'org-outlook)
Run Code Online (Sandbox Code Playgroud)

现在您可以调用该宏(我将它添加到 Outlook 的工具栏中以便快速访问),并且您可以在 Emacs 中快速创建指向电子邮件的链接。

一个问题,当您在文档存储之间移动消息时,GUID 会发生变化,因此如果您在 Exchange 服务器上获取消息的 GUID,然后将其移动到本地 PST 文件,则链接将更改。在获得 GUID 之前移动消息。

  • 这太好了,谢谢!一种简化:我没有弄乱注册表来启用 Outlook URL,而是将 w32-shell-execute 调用更改为: (w32-shell-execute "open" "C:/Programme/Microsoft Office/Office12/ OUTLOOK.EXE" (concat "/select " "outlook:" id) (6认同)
  • 感谢您的回答。我发现我有点需要创建一个空表单来防止未定义的 DataObject 上的编译错误。 (3认同)
  • 为了解决 DataObject 类型错误,以下对我有用。在宏编辑器中,转到“工具”-&gt;“参考”。单击浏览,选择文件“C:\Windows\System32\fm20.dll”并按“确定”。 (2认同)

fnk*_*nkr 8

我通过编写一个简单的 vbscript(下载)解决了这个问题:

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
Run Code Online (Sandbox Code Playgroud)

它将您当前在 Outlook 中选择的元素(电子邮件、日历条目等)的链接复制到剪贴板:

Outlook:176CZREX7A79L9TG1T0AJ6HQ8DEBLTFS60HUQYKT2IXBBZ9ZZVA73MNRYVRWRL4RY0VCPQE1IB5GAWY0D8OSMOB4IFDV5OMG9NX2BBKGFA3IWSD62UCNVK0HD9GA80BIDZSBCZL7INCT
Run Code Online (Sandbox Code Playgroud)

您甚至可以使用重定向服务来获取 HTTP 链接(因为Outlook:如果您粘贴到某处,则可能不会自动检测到链接,但 HTTP 链接是)(下载),只需将最后一行替换为:

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

请注意,您需要先使Outlook:链接正常工作。
http://www.slipstick.com/problems/outlook-missing-outlook-protocol/(向下滚动到“为我做”)

使用 Outlook 2010 进行测试。