前景知识:OAuth,Javamail-android,Javamail api in android using XOauth
我的一个App项目需要在Service中自动发送邮件的功能,因为是后台自动发送邮件,不能出现邮件UI所以需要使用Javamail来发送,在Android中并未包含Javamail,所以需要第三方lib:Javamail-android;同时由于我的App的邮件发送服务不应保存用户的邮件帐号与密码(因为会有安全问题),所以就必须要用到XOauth的方式(也就是无需存储用户邮件帐号和密码的方式)来调用Gmail API来发送邮件。
关键在于XOauth的AuthToken的获取,在这篇文章中讲的很清楚了,需要使用AccountManager来获取AuthToken,关键代码如下:
AccountManager accountManager = AccountManager.get(context);
//获得本机第一个google账号
Account me = accountManager.getAccountsByType("com.google")[0];
//注意在获得AUTHTOKEN前要invalidateAuthToken一下,否则会得到null的AUTHTOKEN
accountManager.invalidateAuthToken("com.google", mailProperties.oauthToken);
accountManager.getAuthToken(me, "oauth2:https://mail.google.com/", null, true, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
try {
//通过回调方法获得AUTHTOKEN
mailProperties.oauthToken = future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
Log.i(SMSBroadcastReceiver2.class.getName(), mailProperties.oauthToken);
} catch (OperationCanceledException e) {
e.printStackTrace();
} catch (AuthenticatorException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}, null);
获取到了AuthToken后,剩下的就简单了,按部就班使用Javamail发送邮件就可以了,发送邮件的方法参照:Javamail api in android using XOauth 就可以了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。