Microsoft Graph로 이메일 메시지 및 첨부 파일 관리
Aspose.Email IGraphClient Microsoft Graph를 통해 이메일 메시지와 첨부 파일을 관리하기 위한 다양한 메서드를 제공합니다.
가능한 작업:
-
메시지 목록 보기
-
메시지 필터링 및 페이지 처리
-
메시지 내용 가져오기
-
메시지 생성 및 전송 (초안 및 EML 포함)
-
메시지 복사 및 이동
-
첨부 파일 관리 (생성, 가져오기, 삭제, 목록 조회)
- List 메시지
- Fetch 메시지
- Create 메시지
- 보내기 메시지
- CopyMessage 메시지
- Move 메시지
- CreateAttachment
- FetchAttachment
- DeleteAttachment
- ListAttachments
메시지 목록
"Inbox"와 같은 폴더에서 메시지를 가져오려면, 다음을 사용하십시오 ListMessages 메서드.
- 폴더 목록을 가져오기 위해 사용 client.ListFolders().
- 각 폴더를 순회합니다.
- 폴더 표시 이름이 "Inbox"인지 확인합니다.
- 그렇다면, 다음을 사용하여 받은 편지함의 메시지를 나열합니다. client.ListMessages(folder.ItemId).
- 받은 편지함의 각 메시지를 순회합니다.
- 각 메시지의 제목을 콘솔에 출력합니다.
var folders = client.ListFolders();
foreach (var folder in folders)
{
if (folder.DisplayName.Equals("Inbox"))
{
// list messages in inbox
var inboxMessages = client.ListMessages(folder.ItemId);
foreach (var messageInfo in inboxMessages)
{
Console.WriteLine(messageInfo.Subject);
}
}
}
Microsoft Graph를 사용한 비동기 메시지 목록
다음 코드 샘플은 Inbox 폴더에 접근하고, 다음을 사용하여 이메일 메시지 한 페이지를 가져오는 방법을 보여줍니다 ListMessagesAsync, 그리고 제목을 출력합니다:
var folders = await client.ListFoldersAsync();
foreach (var folder in folders)
{
Console.WriteLine(folder.DisplayName);
}
var folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
var msgsPage = await client.ListMessagesAsync(folderId, new PageInfo(15) { PageOffset = 0 }, null);
var msgs = msgsPage.Items;
foreach (var msg in msgs)
{
Console.WriteLine(msg.Subject);
}
전송 날짜별 메시지 필터링
다음은 OrderBy 라이브러리 컬렉션의 메서드를 사용하면 전송 날짜를 기준으로 오름차순 및 내림차순 등 다양한 정렬 순서로 메시지를 검색할 수 있습니다. 다음 코드 샘플은 전송 날짜별로 메시지를 정렬하는 방법을 보여줍니다:
-
Graph Client 초기화
- 다음의 인스턴스를 생성합니다 IGraphClient 사용하여 GraphClient.GetClient() 프로바이더와 TenantId를 사용합니다.
-
쿼리 빌더 생성
- 인스턴스화합니다 GraphQueryBuilder 객체.
-
날짜별로 메시지 정렬:
-
내림차순
- 사용
builder.SentDate.OrderBy(false)정렬 순서를 내림차순으로 설정합니다. - 호출하십시오 client.ListMessages() Inbox에서 최대 10개의 메시지를 가져오려면, 다음 쿼리를 사용합니다 builder.GetQuery().
- 조회된 메시지를 messages 변수에 저장합니다.
- 사용
-
오름차순
- 다음 호출로 정렬 순서를 오름차순으로 설정합니다.
builder.SentDate.OrderBy(true). - 사용 client.ListMessages() 다시 Inbox에서 메시지를 가져오되, 이번에는 오름차순으로.
- 이 메시지들을 messages 변수에 저장합니다.
- 다음 호출로 정렬 순서를 오름차순으로 설정합니다.
IGraphClient client = GraphClient.GetClient(provider, TenantId);
var builder = new GraphQueryBuilder();
// create orderby messages query 'DESC'
builder.SentDate.OrderBy(false);
var messagePageInfo = client.ListMessages(KnownFolders.Inbox, new PageInfo(10), builder.GetQuery());
var messages = messagePageInfo.Items;
builder.Clear();
// create orderby messages query 'ASC'
builder.SentDate.OrderBy(true);
messagePageInfo = client.ListMessages(KnownFolders.Inbox, new PageInfo(10), builder.GetQuery());
messages = messagePageInfo.Items;
페이지네이션 및 필터링을 이용한 메시지 목록
대용량 메일함을 다룰 때 페이지네이션을 사용합니다. 아래 예제는 10개씩 페이지를 나누어 읽지 않은 메시지를 가져오고, 처리 후 읽음으로 표시합니다:
- 클라이언트를 초기화합니다.
- 페이지당 표시할 항목 수를 설정합니다. 예: 10.
- 읽지 않은 메시지만 검색하도록 필터를 생성합니다. GraphQueryBuilder 클래스.
builder.IsRead.Equals(false)읽지 않은 메시지를 필터링하기 위한 조건을 설정합니다. - 다음을 호출합니다. ListMessages 클라이언트 객체의 메서드로, 폴더(Inbox)와 페이지당 항목 수(PageInfo(itemsPerPage))를 매개변수로 지정합니다. 또한 읽지 않은 메시지 필터를 적용하기 위해 쿼리 객체를 전달합니다. 반환된 PageInfo 객체(pageInfo)에는 현재 페이지의 검색된 메시지가 Items 속성에 들어 있습니다.
- 마지막 페이지에 도달할 때까지 (pageInfo.LastPage가 false) 반복하는 루프를 생성합니다. 가져온 메시지는 기존 메시지 리스트에 다음을 사용하여 추가됩니다.
messages.AddRange(pageInfo.Items).
// reading unread messages with paging
using var client = GraphClient.GetClient(tokenProvider, config.Tenant);
// paging option
var itemsPerPage = 10;
// create unread messages filter
GraphQueryBuilder builder = new GraphQueryBuilder();
builder.IsRead.Equals(false);
var query = builder.GetQuery();
// list messages
var pageInfo = client.ListMessages(KnownFolders.Inbox, new PageInfo(itemsPerPage), query);
var messages = pageInfo.Items;
while (!pageInfo.LastPage)
{
pageInfo = client.ListMessages(KnownFolders.Inbox, pageInfo.NextPage, query);
messages.AddRange(pageInfo.Items);
}
// set messages state as read
foreach (var message in messages)
{
client.SetRead(message.ItemId);
}
메시지 가져오기
특정 메시지의 전체 내용을 가져옵니다. 다음 코드 샘플은 Inbox에서 최신 메시지를 조회하고 표시하거나 처리하는 방법을 보여줍니다:
- 호출하십시오 client.ListFolders() 메일함의 모든 사용 가능한 폴더를 가져와 folders 변수에 저장합니다.
- foreach 루프를 사용하여 폴더 컬렉션의 각 폴더를 순회합니다.
- 루프 내부에서 폴더 표시 이름이 "Inbox"인지 확인합니다.
- 폴더가 Inbox인 경우, 다음을 사용하여 메시지를 가져옵니다. client.ListMessages() 폴더 ItemId와 함께.
- inboxMessages.Count가 0보다 큰지 확인하여 받은 편지함에 메시지가 있는지 확인합니다.
- 메시지가 있으면, 다음을 사용하여 첫 번째 메시지를 가져옵니다. client.FetchMessage() 첫 번째 메시지의 ItemId와 함께.
- 가져온 메시지의 HTML 본문을 출력합니다.
var folders = client.ListFolders();
foreach (var folder in folders)
{
if (folder.DisplayName.Equals("Inbox"))
{
// list messages in inbox
var inboxMessages = client.ListMessages(folder.ItemId);
if (inboxMessages.Count > 0)
{
// fetch the first message in inbox
var msg = client.FetchMessage(inboxMessages[0].ItemId);
Console.WriteLine(msg.BodyHtml);
}
}
}
OData를 활용한 Microsoft Graph 쿼리
Aspose.Email for .NET은 Microsoft Graph에 대해 OData 쿼리 지원을 제공합니다. 이를 통해 개발자는 폴더, 메시지, 연락처, 캘린더 항목 등과 같은 Graph 리소스를 사용할 때 고급 필터링, 정렬, 선택, 페이지네이션 및 확장을 적용할 수 있습니다. Aspose.Email.Clients.Graph.ODataQueryBuilder 클래스는 OData 쿼리 매개변수를 수동으로 문자열을 만들지 않고 구조화된 방식으로 구성하도록 설계되었습니다. 이렇게 하면 필요한 필드만 검색할 수 있습니다 (Select) 효율성을 위해 필터링을 사용합니다 (Filter) 및 정렬 (OrderBy) 데이터를 정리합니다. 페이지네이션도 구현할 수 있습니다 (Top, Skip)은 대규모 데이터셋에 대해 관련 엔터티를 확장합니다 (Expand)을 한 번에 호출하고, 고급 시나리오를 위해 카운팅 및 전체 텍스트 검색을 활성화합니다.
아래는 목록입니다 GraphClient 선택적 을 지원하는 메서드ODataQueryBuilder 매개변수:**
ListFoldersListMessagesListContactsListCalendarItemsListAttachmentsListCategoriesListOverridesListRulesListTaskListsListTasksListNotebooks
다음 코드 샘플은 을(를) 사용하는 방법을 보여줍니다ODataQueryBuilder폴더 목록을 가져오고, 필터링·정렬·페이지 처리된 이메일 메시지를 메일함에서 검색
var accessParameters = Settings.User1;
var provider = new AzureConfidentialTokenProvider(
accessParameters.TenantId,
accessParameters.ClientId,
accessParameters.ClientSecret);
var client = GraphClient.GetClient(provider, accessParameters.TenantId);
client.Resource = Aspose.Email.Clients.Graph.ResourceType.Users;
client.ResourceId = accessParameters.Username;
client.EndPoint = "https://graph.microsoft.com";
// Example 1: List folders ordered by name
var builder = new ODataQueryBuilder { OrderBy = "name asc" };
var folders = client.ListFolders(builder);
foreach (var folder in folders)
{
Console.WriteLine(folder.DisplayName);
}
// Example 2: Retrieve filtered and paged messages from Inbox
var folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
builder = new ODataQueryBuilder
{
Filter = "startswith(name,'A')",
OrderBy = "name asc",
Top = 10,
Skip = 5,
Select = new[] { "name", "age" },
Expand = new[] { "children", "parents" },
Count = true,
Search = "\"John Doe\"",
Format = "json"
};
var msgs = client.ListMessages(folderId, builder);
foreach (var msg in msgs)
{
Console.WriteLine(msg.Subject);
}
메시지 만들기
다음 사용 CreateMessage 메서드를 사용하여 새 메시지를 Inbox와 같은 특정 폴더에 직접 저장합니다. 다음 예제는 를 구성하는 방법을 보여줍니다. MapiMessage 그리고 메일함에 추가합니다.
var msg = new MapiMessage(OutlookMessageFormat.Unicode)
{
Subject = "My message",
Body = "Hi, it is my message"
};
msg.Recipients.Add("sam@to.com", "Sam", MapiRecipientType.MAPI_TO);
// create message in inbox
client.CreateMessage(KnownFolders.Inbox, msg);
메시지 보내기
다음은 보내기 메서드 IGraphClient 를 사용하여 이메일 메시지를 직접 보낼 수 있게 합니다. MapiMessage 객체. 이 예제에서는 간단한 메시지를 생성하고, 발신자와 수신자 세부 정보를 구성한 뒤 전송합니다.
// prepare the message
var msg = new MapiMessage(OutlookMessageFormat.Unicode)
{
Subject = "My message",
Body = "Hi, it is my message"
};
msg.Recipients.Add("sam@to.com", "Sam", MapiRecipientType.MAPI_TO);
msg.SetProperty(KnownPropertyList.SenderName, "John");
msg.SetProperty(KnownPropertyList.SentRepresentingEmailAddress, "John@from.com");
// send message
client.Send(msg);
초안 메시지 전송
Drafts 폴더에 메시지를 저장하고 나중에 다음을 사용하여 전송할 수 있습니다. IGraphClient이 접근 방식은 메시지를 준비하고, 전송 전에 검토하거나 수정한 뒤, 준비가 되면 발송할 수 있게 합니다. 다음 코드 샘플은 이메일을 생성하고, 메타데이터를 추가하며, 초안으로 저장한 뒤 전송하는 방법을 보여줍니다:
- 다음을 생성합니다 MapiMessage 제목, 본문 및 수신자를 포함합니다.
- 메시지 속성을 사용하여 발신자 세부 정보를 설정합니다.
- Drafts 폴더에 메시지를 저장하려면 다음을 사용합니다. CreateMessage.
- 초안의 ItemId를 전달하여 초안을 전송합니다. Send() 메서드.
// prepare the message
var msg = new MapiMessage(OutlookMessageFormat.Unicode)
{
Subject = "My message",
Body = "Hi, it is my message"
};
msg.Recipients.Add("sam@to.com", "Sam", MapiRecipientType.MAPI_TO);
msg.SetProperty(KnownPropertyList.SenderName, "John");
msg.SetProperty(KnownPropertyList.SentRepresentingEmailAddress, "John@from.com");
// add message to Draft folder
var draftMessage = client.CreateMessage(KnownFolders.Drafts, msg);
// send a draft message
client.Send(draftMessage.ItemId);
EML 메시지 전송
다음 사용 MailMessage 클래스를 사용하여 EML 형식의 메시지를 생성하고 보냅니다. 다음 코드 샘플은 Graph API를 이용해 이메일 메시지를 생성하고 전송하는 방법을 보여줍니다:
// prepare the message
var eml = new MailMessage
{
From = "from@domain.com",
To = "to1@domain.com, to2@domain.com",
Subject = "New message",
HtmlBody = "<html><body>This is the HTML body</body></html>"
};
// send the message
graphClient.Send(eml);
graphClient.Create(KnownFolders.Inbox, eml);
메시지 복사
기존 이메일 메시지의 복사본을 만들려면, 다음을 사용합니다. CopyMessage 메서드 IGraphClient 인터페이스.
// copy message to Inbox folder
var copiedMsg = client.CopyMessage(KnownFolders.Inbox, msg.ItemId);
메시지 이동
기존 이메일 메시지를 현재 위치에서 새 폴더로 이동하려면, 다음을 사용합니다. MoveMessage 메서드 IGraphClient 인터페이스.
// move message to Inbox folder
var movedMsg = client.MoveMessage(KnownFolders.Inbox, msg.ItemId);
첨부 파일 관리
다음은 IGraphClient Aspose.Email for .NET에서는 이메일 첨부 파일을 프로그래밍 방식으로 처리할 수 있습니다. 여기에는 메시지와 연결된 첨부 파일을 생성, 조회, 삭제 및 목록화하는 기능이 포함됩니다. 다음 코드 샘플은 Aspose.Email을 사용하여 Microsoft Graph API를 통해 Outlook 메시지에 대한 첨부 파일 전체 생명 주기 관리를 보여줍니다. 필요에 따라 첨부 파일 내용 및 메타데이터를 맞춤 설정할 수 있습니다.
// create an attachment
var attachment = new MapiAttachment();
attachment.SetProperty(KnownPropertyList.DisplayName, "My Attachment");
attachment.SetProperty(KnownPropertyList.AttachDataBinary, new byte[1024]);
// add an attachment to message
var createdAttachment = client.CreateAttachment(messageInfo.ItemId, attachment);
// fetch a message attachment
var fetchedAttachment = client.FetchAttachment(createdAttachment.ItemId);
// delete a message attachment
client.DeleteAttachment(createdAttachment.ItemId);
// list the message attachments
var attachments = client.ListAttachments(messageInfo.ItemId);