BigSur open 命令不再处理 message:// URL,解决方法?

问题描述

在 macOS 中,您可以获得 (explained here how) 特定电子邮件的 URL。这样,如果您点击该网址,或将其粘贴到浏览器搜索栏中,该特定电子邮件将在 Mail.app 中打开。

这样的 URL 看起来像这样 message://<CALoR5A+vANPG9eCcHRHnO@mail.gmail.com>

在 Catalina 中,我可以使用命令 open 从命令行访问这样的 URL,输入

open -a "Mail.app" "message://<CALoR5A+vANPG9eCcHRHnO@mail.gmail.com>"

但是如果我尝试使用 BigSur,我会收到以下错误

The file /Users/macbook/message:/<CALoR5A+vANPG9eCcHRHnO@mail.gmail.com> does not exist.

此行为似乎与 bug in BigSur 相关。

两个问题

  1. 您知道 open 命令是否仍然可以用于该任务吗?

  2. 或者,我正在寻找解决方法。必须能够实现我期望的行为,因为如果您在 Chrome、Safari 或支持链接的富文本编辑器中传递 message:// 网址,它会得到正确处理。

我尝试过很多方法都没有成功。

Swift 脚本

import AppKit
NSWorkspace.shared.open(URL(string: "message://<CALoR5A+vANPG9eCcHRHnO@mail.gmail.com>")!)

网址为 nil

苹果脚本

tell application "Mail"
    activate
    open location "message://<CALoR5A+vANPG9eCcHRHnO@mail.gmail.com>"
end tell

我不确定上面的代码是否可以在 Catalina 中工作,我只知道在我的情况下它只是打开邮件应用程序而不做任何其他事情。

使用 Chrome

如果您在 Chrome 中粘贴 message:// 网址,它会要求您确认是否要在邮件应用中打开它。这可以使用以下命令覆盖: defaults write com.google.Chrome URLWhitelist -array 'message://*'

让 Chrome 为你打开一个 URL 看起来更容易,但仍然是命令 open -a "Google Chrome" "message://<CALoR5A+vANPG9eCcHRHnO@mail.gmail.com>" 失败,错误类似于之前显示错误

LoR5A+vANPG9eCcHRHnO@mail.gmail.com>"
The file /Users/macbook/message:/<CALoR5A+vANPG9eCcHRHnO@mail.gmail.com> does not exist.

有什么想法吗?

解决方法

我找到了 open 命令不再起作用的原因:需要对尖括号进行转义。

以下命令无效

open -a "Google Chrome.app" "message:<CALoR5A+vANPG9eCcHRHnO_fNTrzgbMpX666oBGxHWsRaXb5@mail.gmail.com>"

下面打开Mail应用,会报错URL被破坏

open -a "Google Chrome.app" "message:CALoR5A+vANPG9eCcHRHnO_fNTrzgbMpX666oBGxHWsRaXb5@mail.gmail.com>"

最后,通过转义 URL,它起作用了:

open -a "Google Chrome.app" "message:%3CCALoR5A%2BvANPG9eCcHRHnO_fNTrzgbMpX666oBGxHWsRaXb5%40mail.gmail.com%3E"

注意,您可以让网址以message:message://开头,没关系。