Làm việc với Tin nhắn bằng Microsoft Graph
Aspose.Email for Java cung cấp một bộ API phong phú để quản lý tin nhắn thông qua Microsoft Graph. Bạn có thể liệt kê, lấy, tạo, cập nhật, di chuyển, sao chép và xóa tin nhắn, cũng như xử lý phân trang và tệp đính kèm. Các mẫu mã dưới đây là các ví dụ về các thao tác phổ biến nhất.
Liệt kê Tin nhắn
Bạn có thể lấy tin nhắn từ một thư mục cụ thể, chẳng hạn như Hộp đến, và lấy toàn bộ nội dung của chúng:
GraphMessageInfoCollection messageInfoColl = client.listMessages(GraphKnownFolders.Inbox);
for (GraphMessageInfo messageInfo : messageInfoColl) {
MapiMessage message = client.fetchMessage(messageInfo.getItemId());
}
Liệt kê Tin nhắn theo Ngày Gửi
Để sắp xếp tin nhắn theo ngày gửi tăng dần, bạn có thể sử dụng OrderBy tính năng của GraphQueryBuilder:
// create orderby messages query 'ASC'
GraphQueryBuilder builder = new GraphQueryBuilder();
builder.getSentDate().orderBy(true);
MailQuery query = builder.getQuery();
GraphMessagePageInfo pageInfo = client.listMessages(GraphKnownFolders.Inbox, new PageInfo(10), query);
Lấy Tin nhắn
Khi bạn có tham chiếu tới một tin nhắn, bạn có thể lấy nội dung đầy đủ của nó:
GraphMessageInfo messageInfo = messageInfoColl.get(0);
MapiMessage fetchedMessage = client.fetchMessage(messageInfo.getItemId());
Cập nhật Tin nhắn
Sau khi lấy một tin nhắn, bạn có thể sửa đổi nội dung của nó và cập nhật lên máy chủ:
fetchedMessage.setSubject("Update message");
MapiMessage updatedMessage = client.updateMessage(fetchedMessage);
Phân trang trong danh sách Tin nhắn
Khi làm việc với hộp thư lớn, bạn có thể sử dụng phân trang để truy xuất tin nhắn theo từng phần. Ví dụ dưới đây minh họa việc liệt kê các tin nhắn chưa đọc theo các trang, mỗi trang có hai mục:
// send ping test messages
for (int i = 0; i < 5; i++) {
MailMessage eml = new MailMessage(user.EMail, user.EMail, "ping" + i, "test body");
client.send(MapiMessage.fromMailMessage(eml));
}
// waiting for inbox
Thread.sleep(10000);
// paging option
int itemsPerPage = 2;
// create unread messages filter
GraphQueryBuilder builder = new GraphQueryBuilder();
builder.isRead().equals(false);
MailQuery query = builder.getQuery();
// list messages
GraphMessagePageInfo pageInfo = client.listMessages(GraphKnownFolders.Inbox, new PageInfo(itemsPerPage), query);
GraphMessageInfoCollection messages = pageInfo.getItems();
while (!pageInfo.getLastPage())
{
pageInfo = client.listMessages(GraphKnownFolders.Inbox, pageInfo.getNextPage(), query);
// add next page items to common collection
messages.addRange(pageInfo.getItems());
}
// set messages state as read
for (GraphMessageInfo message : messages) {
client.setRead(message.getItemId());
}
Tạo Tin nhắn
Bạn có thể tạo tin nhắn mới với tiêu đề, nội dung và các thuộc tính:
MapiMessage message = new MapiMessage();
message.setSubject("Subject");
message.setBody("Body");
message.setProperty(KnownPropertyList.DISPLAY_TO, "to@host.com");
message.setProperty(KnownPropertyList.SENDER_NAME, "from");
message.setProperty(KnownPropertyList.SENT_REPRESENTING_EMAIL_ADDRESS, "from@host.com");
MapiMessage createdMessage = client.createMessage(GraphKnownFolders.Inbox, message);
Gửi Tin nhắn
Bạn có thể gửi tin nhắn trực tiếp:
client.send(message);
Hoặc gửi một tin nháp sau khi tạo nó trong thư mục Nháp:
MapiMessage draftMessage = client.createMessage(GraphKnownFolders.Drafts, message);
client.send(draftMessage.getItemId());
Sao chép và Di chuyển Tin nhắn
Tin nhắn có thể được sao chép hoặc di chuyển giữa các thư mục:
MapiMessage copiedMessage = client.copyMessage(GraphKnownFolders.Inbox, draftMessage.getItemId());
MapiMessage movedMessage = client.moveMessage(GraphKnownFolders.Inbox, draftMessage.getItemId());
Quản lý Đính kèm
Để liệt kê và xóa các tệp đính kèm từ một tin nhắn, sử dụng đoạn mã mẫu dưới đây:
MapiAttachmentCollection attachments = client.listAttachments(fetchedMessage.getItemId());
for (MapiAttachment att : attachments) {
client.deleteAttachment(att.getItemId());
}
Xóa một Tin nhắn
Cuối cùng, bạn có thể xóa một tin nhắn vĩnh viễn:
client.delete(message.getItemId());