一、背景说明
在已有的项目中,已经获取到了Graph的AccessToken并保存在内存里面。所以不希望再通过client secret或者certificate去创建GraphServiceClient对象。希望使用现有的token字符串来创建初始化创建GraphServiceClient从而来实现Graph其他API功能。
二、具体实现
2.1 需要Java Graph SDK依赖 加入到pom.xml文件内
<!-- Microsoft Graph SDK for Java -->
<dependency>
<groupId>com.microsoft.graph</groupId>
<artifactId>microsoft-graph</artifactId>
<version>[5.0,)</version>
</dependency>
<!-- Azure AD Authentication SDK for Java -->
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>[1.3,)</version>
</dependency>
2.2 代码片段
public static GraphServiceClient initGraphServiceClient() {
IAuthenticationProvider authProvider = new IAuthenticationProvider() {
@Override
public CompletableFuture<String> getAuthorizationTokenAsync(URL requestUrl) {
CompletableFuture<String> future = new CompletableFuture<>();
future.complete(Your_AccessToken);
return future;
}
};
return GraphServiceClient.builder().authenticationProvider(authProvider).buildClient();
}
三、测试
下面代码是实现调用创建GraphServiceClient,调用graph api发送带附件的邮件。
public static String sendMail() {
try {
String mfrom = "xxxx@outlook.com";
String to = "xxxx@outlook.com";
GraphServiceClient<Request> graphClient = initGraphServiceClient();
Message message = new Message();
message.subject = "Meet for lunch?";
ItemBody body = new ItemBody();
body.contentType = BodyType.TEXT;
body.content = "The new cafeteria is open.";
message.body = body;
LinkedList<Recipient> toRecipientsList = new LinkedList<Recipient>();
Recipient toRecipients = new Recipient();
EmailAddress emailAddress = new EmailAddress();
emailAddress.address = to;
toRecipients.emailAddress = emailAddress;
toRecipientsList.add(toRecipients);
message.toRecipients = toRecipientsList;
// 构建附件
LinkedList<Attachment> attachmentsList = new LinkedList<Attachment>();
FileAttachment attachments = new FileAttachment();
attachments.name = "hello word.txt";
attachments.oDataType = "#microsoft.graph.fileAttachment";
attachments.contentType = "text/plain";
attachments.contentBytes = Base64.getDecoder().decode("SGVsbG8gV29ybGQh");
attachmentsList.add(attachments);
AttachmentCollectionResponse attachmentCollectionResponse = new AttachmentCollectionResponse();
attachmentCollectionResponse.value = attachmentsList;
AttachmentCollectionPage attachmentCollectionPage = new AttachmentCollectionPage(
attachmentCollectionResponse, null);
message.attachments = attachmentCollectionPage;
// 以指定用户邮箱发送邮件
graphClient.users(mfrom).sendMail(
UserSendMailParameterSet.newBuilder().withMessage(message).withSaveToSentItems(true).build())
.buildRequest().post();
log.info("send email success");
return "success";
} catch (Exception e) {
e.printStackTrace();
log.error("send email error : {}", e.getMessage());
return e.getMessage();
}
}