我正在尝试使用简单的java程序(like this one)连接到gmail。但我的问题是:
出于安全原因,有没有办法用加密密码而不是真实密码来做到这一点!!像我们在java-Oracle db中做的那样?
答案 0 :(得分:4)
默认情况下,IMAP的唯一身份验证机制是the LOGIN
command,它采用未加密的用户名和密码。您可以在其上添加加密层,方法是通过IMAP连接或通过STARTTLS
命令启动TLS层,但仍需要客户端知道明文密码。
服务器还可以选择通过the AUTHENTICATE
command提供可以调用的SASL身份验证方法。服务器在响应CAPABILITY
命令时通告它支持哪些SASL机制。例如,如果服务器包含“AUTH=PLAIN
”功能,则客户端可以通过PLAIN
IMAP命令使用AUTHENTICATE PLAIN
SASL身份验证方法。
Gmail仅支持一种SASL身份验证机制XOAUTH
:
C: 1 capability
S: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA XLIST CHILDREN XYZZY
SASL-IR AUTH=XOAUTH
S: 1 OK Thats all she wrote! dv32if2169247ibb.17
XOAUTH
是使用OAuth的非标准SASL身份验证机制。 (领先的'X'意味着它没有标准化。)Google发布了a document defining the XOAUTH
SASL mechanism。他们还提供了google-mail-xoauth-tools package,其中包含示例代码,说明如何通过XOAUTH
将Gmail与JavaMail配合使用。