我在工作时使用 Outlook 作为电子邮件客户端,但我不想用它来管理我的任务和待办事项。(相反,我使用纯文本文件和 Emacs org-mode。)由于许多待办事项都是以收件箱中的邮件开始的,因此我经常需要引用这些邮件。
是否有一些巧妙的方法来创建一个链接(URL),当点击时会在 Outlook 中打开特定的电子邮件?
答案1
您可以使用 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
作为库什克评论中指出,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
差不多了,将这点 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
最后,更新 .emacs 文件以包含 Outlook 链接代码。只需在设置 org-mode 后将其添加到某处即可。
(require 'org-outlook)
现在您可以调用宏(我将其添加到 Outlook 中的工具栏以便快速访问),并且可以在 Emacs 中快速创建指向电子邮件的链接。
有一个问题,当您在文档存储之间移动邮件时,GUID 会发生变化,因此如果您在邮件位于 Exchange 服务器上时获取邮件的 GUID,然后将其移动到本地 PST 文件,则链接会发生变化。请在获取 GUID 之前移动邮件。
答案2
我通过编写一个简单的 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
它将您当前在 Outlook 中选择的元素(电子邮件、日历条目等)的链接复制到您的剪贴板:
Outlook:176CZREX7A79L9TG1T0AJ6HQ8DEBLTFS60HUQYKT2IXBBZ9ZZVA73MNRYVRWRL4RY0VCPQE1IB5GAWY0D8OSMOB4IFDV5OMG9NX2BBKGFA3IWSD62UCNVK0HD9GA80BIDZSBCZL7INCT
您甚至可以使用重定向服务来获取 HTTP 链接(因为Outlook:
如果您将其粘贴到某处,链接可能不会自动被检测到,但 HTTP 链接会被检测到)(下载),只需将最后一行替换为:
Shell.ShellExecute "cmd", "/c echo https://api.fnkr.net/goto/jsclient/raw/?closeAfter=500#Outlook:" & SelectedItem.entryID & " | clip", "", "runas", 1
请注意,您需要先使Outlook:
链接正常工作。
http://www.slipstick.com/problems/outlook-missing-outlook-protocol/(向下滚动到“为我做”)
使用 Outlook 2010 测试。
答案3
我没有足够的声誉积分来发表评论接受的答案以上,但我想添加一个交叉引用来修改@user25995 提供的优秀答案 - 我将其发布在(emacs)StackExchange。
根据我在那里发布的一个问题所收到的评论,我将 (deprecated) 的用法更改org-add-link-type
为org-link-set-parameters
并包含一个export:
函数,以便 HTML 导出后端给我一个格式正确的<a href="outlook:...">
链接类型。
答案4
您可以将 Outlook 电子邮件复制到 OneNote(以黄色字母图标显示),然后右键单击并选择“链接到段落”,然后将链接粘贴到另一个可以使用链接的文档中。
但无论如何,微软应该将电子邮件链接功能作为标准功能。这是 Lotus Notes 的一个非常有用的功能。