如何在Mail.app中运行的applescript中使用钥匙串中的密码?
Posted
技术标签:
【中文标题】如何在Mail.app中运行的applescript中使用钥匙串中的密码?【英文标题】:How to use a password from the keychain within an applescript running within Mail.app? 【发布时间】:2012-05-21 09:49:11 【问题描述】:我正在尝试设置一个applescript,它(通过python imaplib ...)对我的gmail帐户(未在Mail.app中配置IMAP,只有POP)执行某些操作。
为此,脚本需要使用我的密码登录。如果不是出于安全考虑,我可以简单地将我的密码硬编码到 python 脚本中......
有没有办法让 Mail.app 内部触发的这种 AppleScript(例如通过规则)可以使用我存储在钥匙串中的密码?
【问题讨论】:
【参考方案1】:以下内容是从我的脚本库中的脚本中复制出来的...
-- 如果您需要在脚本中使用密码,您可以使用钥匙串来存储密码并让脚本检索它。这样您的密码就会受到保护,因为您不需要在脚本中以明文形式存储密码。
-- 创建密码项 - 打开 Keychain Access 应用程序并选择左侧栏中的钥匙串。然后单击文件>新密码项...,为其命名,将您的帐户短名称输入帐户,然后输入密码。在密码列表中突出显示它并获取相关信息。在 Attributes 按钮下输入它的种类作为通用键。之所以选择这个,是因为它们的数量不多,而且搜索速度要快得多。
-- 注意:苹果在 10.7 中删除了钥匙串脚本,因此我们现在使用安全命令行工具
getPW("name of keychain item")
on getPW(keychainItemName)
do shell script "security 2>&1 >/dev/null find-generic-password -gl " & quoted form of keychainItemName & " | awk 'print $2'"
return (text 2 thru -2 of result)
end getPW
【讨论】:
请注意,如果密码包含 ASCII 范围之外的字符,这将不会返回正确的密码 - 请参阅我在 my answer 中链接到的 TextMate 博客文章中的 this comment。 感谢您的提醒。我没有意识到,所以很高兴知道。【参考方案2】:有一种方法,称为 Keychain Access Scripting,Apple 在 OS X 10.7 中弃用了它,从 AppleScript 中删除了必要的扩展。 但是,您可以使用 security
shell 实用程序,例如 detailed on the TextMate blog(请务必阅读 cmets - 有一些问题),或者,我建议您使用Apple 组件的第三方替代品,Daniel Jalkut 的优秀 Usable Keychain Scripting 应用程序。安装后,AppleScript 将检索您的密码(假设帐户名称为“GMail”):
tell application "Usable Keychain Scripting" to get password of first generic item of current keychain whose account is "GMail"
【讨论】:
【参考方案3】:我在用这个
# Replace %ACCOUNT_NAME% with account name of Keychain item
get_pw ()
security 2>&1 >/dev/null find-generic-password -ga "%ACCOUNT_NAME%" \
| sed 's/password: "\(.*\)"/\1/'
PASS=$(get_pw)
【讨论】:
【参考方案4】:更新的答案,因为我认为以前没有。 security
现在有一个 -w
选项,它只输出密码而不需要解析输出。
这在 python 中为我们提供了这个解决方案:
pw = subprocess.check_output(["security", "find-generic-password", "-wl", "MY_KEYCHAIN_ID"])
这仍然会触发输入用户密码的提示,与其他解决方案相同。
【讨论】:
以上是关于如何在Mail.app中运行的applescript中使用钥匙串中的密码?的主要内容,如果未能解决你的问题,请参考以下文章
即使用户已卸载 Mail.app,如何在我的应用程序中添加电子邮件链接仍然有效?
在 iOS 8 中,如何通过 Mail.app 实现长滑动删除手势
如何通过 AppleScript 设置当前 Mail.app 外发消息的发件人?