如何在Mail.app中运行的AppleScript中使用钥匙串中的密码?

时间:2012-05-13 19:00:50

标签: macos applescript keychain apple-mail

我正在尝试设置一个应用(通过python imaplib ...)对我的Gmail帐户进行某些操作的AppleScript(在Mail.app中没有配置IMAP,只有POP)。

为此,脚本需要使用我的密码登录。如果不是为了安全考虑,我可以简单地将我的密码硬编码到python脚本中......

有没有办法在Mail.app中触发这样的AppleScript(例如通过规则)可以使用存储在钥匙串中的密码?

4 个答案:

答案 0 :(得分:6)

以下内容将从我的脚本库中的脚本中复制出来......

- 如果您需要在脚本中使用密码,可以使用钥匙串存储密码并让脚本检索密码。这样您的密码就会受到保护,因为您不需要在脚本中以明文形式存储密码。

- 创建密码项 - 打开Keychain Access应用程序,然后在左栏中选择钥匙串。然后单击文件>新密码项...,为其命名,将您的帐户短名称记入帐户,然后输入密码。在密码列表中突出显示它并获取有关它的信息。在“属性”按钮下,输入其类型作为通用键。之所以选择它是因为它们并不多,搜索速度也快得多。

- 注意:在10.7 apple中删除了keychain脚本,因此我们现在使用安全命令行工具

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

答案 1 :(得分:2)

有这样一种方式,它被称为 Keychain Access Scripting ,Apple不推荐使用OS X 10.7,从AppleScript中删除必要的扩展名。 但是,你可以使用像detailed on the TextMate blog这样的security shell实用程序(请务必阅读评论 - 有一些问题),或者,我会建议使用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"

答案 2 :(得分:0)

我正在使用这个

# 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)

答案 3 :(得分:0)

一个更新的答案,因为我以前不知道这个答案。 security现在具有一个-w选项,该选项仅输出密码,而无需解析输出。

这为我们提供了python解决方案:

pw = subprocess.check_output(["security", "find-generic-password", "-wl", "MY_KEYCHAIN_ID"])

这仍然会触发提示输入用户密码的提示,与其他解决方案相同。