Работа с почтовым ящиком Exchange и сообщениями
Получение информации о почтовом ящике с использованием EWS
Вы можете получить информацию о почтовом ящике с сервера Exchange, вызвав метод GetMailboxInfo класса IEWSClient. Он возвращает экземпляр типа ExchangeMailboxInfo. Получите информацию о почтовом ящике из свойств, таких как MailboxUri, InboxUri и DraftsUri. Эта статья показывает, как получить доступ к информации о почтовом ящике с использованием Exchange Web Services.
Для подключения к серверу Exchange с использованием Exchange Web Services (EWS) используйте класс IEWSClient. Этот класс использует EWS для подключения и управления элементами на сервере Exchange. Следующий кодовый Snippet показывает, как получить информацию о почтовом ящике с использованием обменных веб-сервисов.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Create instance of EWSClient class by giving credentials | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
// Get mailbox size, exchange mailbox info, Mailbox and Inbox folder URI | |
System::Console::WriteLine(System::String(u"Mailbox size: ") + client->GetMailboxSize() + u" bytes"); | |
System::SharedPtr<ExchangeMailboxInfo> mailboxInfo = client->GetMailboxInfo(); | |
System::Console::WriteLine(System::String(u"Mailbox URI: ") + mailboxInfo->get_MailboxUri()); | |
System::Console::WriteLine(System::String(u"Inbox folder URI: ") + mailboxInfo->get_InboxUri()); | |
System::Console::WriteLine(System::String(u"Sent Items URI: ") + mailboxInfo->get_SentItemsUri()); | |
System::Console::WriteLine(System::String(u"Drafts folder URI: ") + mailboxInfo->get_DraftsUri()); |
Отправка электронных сообщений
Вы можете отправлять электронные сообщения с использованием сервера Exchange с помощью метода IEWSClient->Send(), который принимает экземпляр MailMessage в качестве параметра и отправляет электронное письмо. Эта статья объясняет, как отправлять электронные сообщения с использованием Exchange Web Services.
Следующий кодовый Snippet показывает, как отправить электронные сообщения с использованием IEWSClient.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Create instance of IEWSClient class by giving credentials | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
// Create instance of type MailMessage | |
System::SharedPtr<MailMessage> msg = System::MakeObject<MailMessage>(); | |
msg->set_From(MailAddress::to_MailAddress(u"sender@domain.com")); | |
msg->set_To(MailAddressCollection::to_MailAddressCollection(u"recipient@ domain.com ")); | |
msg->set_Subject(u"Sending message from exchange server"); | |
msg->set_HtmlBody(u"<h3>sending message from exchange server</h3>"); | |
// Send the message | |
client->Send(msg); |
Чтение электронных писем из почтового ящика другого пользователя
Некоторые учетные записи на серверах Exchange имеют право доступа к нескольким почтовым ящикам, и некоторые пользователи имеют несколько учетных записей электронной почты на одном сервере Exchange. В обоих случаях пользователи могут получать доступ к почтовым ящикам других пользователей с помощью Aspose.Email. Этот API предоставляет механизм для доступа к папкам и электронным письмам из других почтовых ящиков с использованием класса IEWSClient. Эта функциональность может быть достигнута с использованием перегруженного метода GetMailboxInfo() и предоставлением адреса электронной почты пользователя в качестве параметра.
Следующий кодовый Snippet показывает, как читать электронные письма с использованием класса IEWSClient.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Create instance of EWSClient class by giving credentials | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
// Get Exchange mailbox info of other email account | |
System::SharedPtr<ExchangeMailboxInfo> mailboxInfo = client->GetMailboxInfo(u"otherUser@domain.com"); |
Список сообщений
Список электронных сообщений в почтовом ящике Exchange можно получить, вызвав метод ListMessages. Получите основную информацию о сообщениях, такую как тему, отправителя, получателя и идентификатор сообщения, используя метод ListMessages.
Простой список сообщений
Чтобы перечислить сообщения в почтовом ящике Exchange:
- Создайте экземпляр класса IEWSClient.
- Вызовите метод ListMessages, чтобы получить коллекцию сообщений.
- Пройдите через коллекцию и отображайте информацию о сообщениях.
Следующий кодовый Snippet показывает, как подключиться к серверу Exchange с использованием EWS и перечислить сообщения из папки «Входящие».
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Create instance of ExchangeWebServiceClient class by giving credentials | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
// Call ListMessages method to list messages info from Inbox | |
System::SharedPtr<ExchangeMessageInfoCollection> msgCollection = client->ListMessages(client->get_MailboxInfo()->get_InboxUri()); | |
// Loop through the collection to display the basic information | |
for (auto msgInfo : System::IterateOver(msgCollection)) | |
{ | |
System::Console::WriteLine(System::String(u"Subject: ") + msgInfo->get_Subject()); | |
if (msgInfo->get_From() != nullptr) | |
System::Console::WriteLine(System::String(u"From: ") + msgInfo->get_From()->ToString()); | |
System::Console::WriteLine(System::String(u"To: ") + msgInfo->get_To()->ToString()); | |
System::Console::WriteLine(System::String(u"Message ID: ") + msgInfo->get_MessageId()); | |
System::Console::WriteLine(System::String(u"Unique URI: ") + msgInfo->get_UniqueUri()); | |
} |
Перечисление сообщений из разных папок
Вышеуказанный кодовый Snippet перечисляет все сообщения в папке «Входящие». Также возможно получить список сообщений из других папок. Метод ListMessages принимает URI папки в качестве параметра. При условии, что URI папки действителен, вы можете получить список сообщений из этой папки. Используйте IEWSClient->get_MailboxInfo->xxxFolderUri свойство, чтобы получить URI различных папок. Остальная часть кода такая же, как для получения списка сообщений. Следующий кодовый Snippet показывает, как перечислить сообщения из разных папок с использованием EWS.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Create instance of EWSClient class by giving credentials | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
// Get folder URI | |
System::String strFolderURI = System::String::Empty; | |
strFolderURI = client->get_MailboxInfo()->get_InboxUri(); | |
strFolderURI = client->get_MailboxInfo()->get_DeletedItemsUri(); | |
strFolderURI = client->get_MailboxInfo()->get_DraftsUri(); | |
strFolderURI = client->get_MailboxInfo()->get_SentItemsUri(); | |
// Get list of messages from the specified folder | |
System::SharedPtr<ExchangeMessageInfoCollection> msgCollection = client->ListMessages(strFolderURI); |
Перечисление сообщений с поддержкой постраничного вывода
Следующий кодонов Snippet показывает, как получить список сообщений с поддержкой постраничного вывода.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
// Create some test messages to be added to server for retrieval later | |
int32_t messagesNum = 12; | |
int32_t itemsPerPage = 5; | |
System::SharedPtr<MailMessage> message; | |
for (int32_t i = 0; i < messagesNum; i++) | |
{ | |
message = System::MakeObject<MailMessage>(u"from@domain.com", u"to@domain.com", System::String(u"EMAILNET-35157_1 - ") + System::ObjectExt::ToString(System::Guid::NewGuid()), u"EMAILNET-35157 Move paging parameters to separate class"); | |
client->AppendMessage(client->get_MailboxInfo()->get_InboxUri(), message); | |
} | |
// Verfiy that the messages have been added to the server | |
System::SharedPtr<ExchangeMessageInfoCollection> totalMessageInfoCol = client->ListMessages(client->get_MailboxInfo()->get_InboxUri()); | |
System::Console::WriteLine(totalMessageInfoCol->get_Count()); | |
/// /////////////// RETREIVING THE MESSAGES USING PAGING SUPPORT //////////////////////////////////// | |
System::SharedPtr<System::Collections::Generic::List<System::SharedPtr<ExchangeMessagePageInfo>>> pages = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<ExchangeMessagePageInfo>>>(); | |
System::SharedPtr<ExchangeMessagePageInfo> pageInfo = client->ListMessagesByPage(client->get_MailboxInfo()->get_InboxUri(), itemsPerPage); | |
// Total Pages Count | |
System::Console::WriteLine(pageInfo->get_TotalCount()); | |
pages->Add(pageInfo); | |
while (!pageInfo->get_LastPage()) | |
{ | |
pageInfo = client->ListMessagesByPage(client->get_MailboxInfo()->get_InboxUri(), itemsPerPage, pageInfo->get_PageOffset() + 1); | |
pages->Add(pageInfo); | |
} | |
int32_t retrievedItems = 0; | |
for (auto pageCol : System::IterateOver(pages)) | |
{ | |
retrievedItems += pageCol->get_Items()->get_Count(); | |
} | |
// Verify total message count using paging | |
System::Console::WriteLine(retrievedItems); |
Получение информации о типах сообщений из ExchangeMessageInfo
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
const System::String mailboxUri = u"https://exchange/ews/exchange.asmx"; | |
const System::String domain = u""; | |
const System::String username = u"username@ASE305.onmicrosoft.com"; | |
const System::String password = u"password"; | |
System::SharedPtr<System::Net::NetworkCredential> credentials = System::MakeObject<System::Net::NetworkCredential>(username, password, domain); | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
System::SharedPtr<ExchangeMessageInfoCollection> list = client->ListMessages(client->get_MailboxInfo()->get_DeletedItemsUri()); | |
System::Console::WriteLine(System::ObjectExt::ToString(list->idx_get(0)->get_MessageInfoType())); |
Сохранение сообщений
Эта статья показывает, как получить сообщения из почтового ящика сервера Exchange и сохранить их на диск в форматах EML и MSG:
- Сохранить в формате EML на диске.
- Сохранить в потоке памяти.
- Сохранить в формате MSG.
Сохранение сообщений в формате EML
Чтобы получить сообщения и сохранить в формате EML:
- Создайте экземпляр класса IEWSClient.
- Укажите mailboxUri, имя пользователя, пароль и домен.
- Вызовите метод IEWSClient->ListMessages(), чтобы получить экземпляр коллекции ExchangeMessagesInfoCollection.
- Пройдите через коллекцию ExchangeMessagesInfoCollection, чтобы получить уникальный URI для каждого сообщения.
- Вызовите метод IEWSClient->SaveMessage() и передайте уникальный URI и место сохранения в качестве параметров.
Следующий кодовый Snippet показывает, как использовать EWS для подключения к серверу Exchange и сохранения сообщений в виде файлов EML.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
System::String dataDir = GetDataDir_Exchange(); | |
// Create instance of IEWSClient class by giving credentials | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
// Call ListMessages method to list messages info from Inbox | |
System::SharedPtr<ExchangeMessageInfoCollection> msgCollection = client->ListMessages(client->get_MailboxInfo()->get_InboxUri()); | |
// Loop through the collection to get Message URI | |
for (auto msgInfo : System::IterateOver(msgCollection)) | |
{ | |
System::String strMessageURI = msgInfo->get_UniqueUri(); | |
// Now save the message in disk | |
client->SaveMessage(strMessageURI, dataDir + msgInfo->get_MessageId() + u"out.eml"); | |
} |
Сохранение сообщений в поток памяти
Вместо того, чтобы сохранять файлы EML на диск, их можно сохранить в поток памяти. Это полезно, когда вы хотите сохранить поток в каком-то месте хранения, например, в базе данных. После того как поток был сохранен в базе данных, вы можете перезагрузить файл EML в классе MailMessage. Следующий кодовый Snippet показывает, как сохранить сообщения из почтового ящика сервера Exchange в поток памяти с использованием EWS.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Call ListMessages method to list messages info from Inbox | |
System::SharedPtr<ExchangeMessageInfoCollection> msgCollection = client->ListMessages(client->get_MailboxInfo()->get_InboxUri()); | |
// Loop through the collection to get Message URI | |
for (auto msgInfo : System::IterateOver(msgCollection)) | |
{ | |
System::String strMessageURI = msgInfo->get_UniqueUri(); | |
// Now save the message in memory stream | |
System::SharedPtr<System::IO::MemoryStream> stream = System::MakeObject<System::IO::MemoryStream>(); | |
client->SaveMessage(strMessageURI, datadir + stream); | |
} |
Сохранение сообщений в формате MSG
Метод IEWSClient->SaveMessage() может напрямую сохранить сообщение в формате EML. Чтобы сохранить сообщения в формате MSG, сначала вызовите метод IEWSClient->FetchMessage(), который возвращает экземпляр класса MailMessage. Затем вызовите метод MailMessage->Save(), чтобы сохранить сообщение в MSG. Следующий кодовый Snippet показывает, как получить сообщения из почтового ящика сервера Exchange и сохранить их в формате MSG с использованием EWS.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Create instance of EWSClient class by giving credentials | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
// Call ListMessages method to list messages info from Inbox | |
System::SharedPtr<ExchangeMessageInfoCollection> msgCollection = client->ListMessages(client->get_MailboxInfo()->get_InboxUri()); | |
int32_t count = 0; | |
// Loop through the collection to get Message URI | |
for (auto msgInfo : System::IterateOver(msgCollection)) | |
{ | |
System::String strMessageURI = msgInfo->get_UniqueUri(); | |
// Now get the message details using FetchMessage() and Save message as Msg | |
System::SharedPtr<MailMessage> message = client->FetchMessage(strMessageURI); | |
message->Save(dataDir + (count++) + u"_out.msg", SaveOptions::get_DefaultMsgUnicode()); | |
} |
Получение ExchangeMessageInfo из URI сообщения
Электронное сообщение представляется своим уникальным идентификатором, URI, и является неотъемлемой частью объекта ExchangeMessageInfo. В случае, если доступен только URI сообщения, объект ExchangeMessageInfo также можно получить с помощью этой доступной информации. Перегруженная версия метода ListMessages принимает список идентификаторов и возвращает коллекцию ExchangeMessageInfoCollection. Следующий кодовый Snippet показывает, как получить ExchangeMessageInfo из URI сообщения.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
System::SharedPtr<System::Collections::Generic::List<System::String>> ids = System::MakeObject<System::Collections::Generic::List<System::String>>(); | |
System::SharedPtr<System::Collections::Generic::List<System::SharedPtr<MailMessage>>> messages = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<MailMessage>>>(); | |
for (int32_t i = 0; i < 5; i++) | |
{ | |
System::SharedPtr<MailMessage> message = System::MakeObject<MailMessage>(u"user@domain.com", u"receiver@domain.com", System::String(u"EMAILNET-35033 - ") + System::ObjectExt::ToString(System::Guid::NewGuid()), u"EMAILNET-35033 Messages saved from Sent Items folder doesn't contain 'To' field"); | |
messages->Add(message); | |
System::String uri = client->AppendMessage(message); | |
ids->Add(uri); | |
} | |
System::SharedPtr<ExchangeMessageInfoCollection> messageInfoCol = client->ListMessages(ids); | |
for (auto messageInfo : System::IterateOver(messageInfoCol)) | |
{ | |
// Do something ... | |
System::Console::WriteLine(messageInfo->get_UniqueUri()); | |
} |
Получение сообщений из почтового ящика сервера Exchange
Метод ListMessages() используется для получения списка сообщений из почтового ящика сервера Exchange. Метод ListMessages() получает основную информацию о сообщениях, например, тему, идентификатор сообщения, отправителя и получателя. Чтобы получить полные данные о сообщении, Aspose.Email предоставляет метод IEWSClient->FetchMessage(). Этот метод принимает URI сообщения в качестве параметра и возвращает экземпляр класса MailMessage. Класс MailMessage затем предоставляет детали сообщения, такие как текст, заголовки и вложения. Чтобы получить сообщения из почтового ящика сервера Exchange:
- Создайте экземпляр типа IEWSClient.
- Укажите имя сервера, имя пользователя, пароль и домен.
- Вызовите метод IEWSClient->ListMessages(), чтобы получить ExchangeMessagesInfoCollection.
- Пройдите через коллекцию ExchangeMessagesInfoCollection, чтобы получить значения ExchangeMessageInfo->get_UniqueUri().
- Вызовите IEWSClient->FetchMessage() и передайте ExchangeMessageInfo->get_UniqueUri() в качестве параметра.
Следующий кодовый Snippet демонстрирует получение всех сообщений с использованием EWS.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Create instance of ExchangeWebServiceClient class by giving credentials | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
// Call ListMessages method to list messages info from Inbox | |
System::SharedPtr<ExchangeMessageInfoCollection> msgCollection = client->ListMessages(client->get_MailboxInfo()->get_InboxUri()); | |
// Loop through the collection to get Message URI | |
for (auto msgInfo : System::IterateOver(msgCollection)) | |
{ | |
System::String strMessageURI = msgInfo->get_UniqueUri(); | |
// Now get the message details using FetchMessage() | |
System::SharedPtr<MailMessage> msg = client->FetchMessage(strMessageURI); | |
for (auto att : System::IterateOver(msg->get_Attachments())) | |
{ | |
System::Console::WriteLine(System::String(u"Attachment Name: ") + att->get_Name()); | |
} | |
} |
Предварительное получение размера сообщения
Microsoft Outlook InterOp предоставляет возможность извлечения размера сообщения перед фактическим получением полного сообщения с сервера. В случае API Aspose.Email сводная информация, полученная с обменного сервера, представлена классом ExchangeMessageInfo. Он предоставляет возможность получения размера сообщения с помощью свойства Size. Для получения размера сообщения стандартный вызов IEWSClient->ListMessages() используется для извлечения ExchangeMessagesInfoCollection. Следующий кодовый Snippet показывает, как отобразить размер сообщения с использованием класса ExchangeMessageInfo.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Create instance of ExchangeWebServiceClient class by giving credentials | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
// Call ListMessages method to list messages info from Inbox | |
System::SharedPtr<ExchangeMessageInfoCollection> msgCollection = client->ListMessages(client->get_MailboxInfo()->get_InboxUri()); | |
// Loop through the collection to display the basic information | |
for (auto msgInfo : System::IterateOver(msgCollection)) | |
{ | |
System::Console::WriteLine(System::String(u"Subject: ") + msgInfo->get_Subject()); | |
if (msgInfo->get_From() != nullptr) | |
System::Console::WriteLine(System::String(u"From: ") + msgInfo->get_From()->ToString()); | |
if (msgInfo->get_To() != nullptr) | |
System::Console::WriteLine(System::String(u"To: ") + msgInfo->get_To()->ToString()); | |
System::Console::WriteLine(System::String(u"Message Size: ") + msgInfo->get_Size()); | |
System::Console::WriteLine(u"=================================="); | |
} |
Загрузка сообщений из общих папок
Microsoft Exchange Server позволяет пользователям создавать общие папки и размещать в них сообщения. Чтобы сделать это через ваше приложение, используйте класс Aspose.Email EWSClient, чтобы подключиться к серверу Exchange и читать и загружать сообщения и записи из общих папок. Следующий кодовый Snippet показывает, как читать все общие папки и подпапки, а также перечислять и загружать любые сообщения, найденные в этих папках. Этот пример работает только с Microsoft Exchange Server 2007 и выше, поскольку только они поддерживают EWS.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
static String dataDir = GetDataDir_Exchange(); | |
String username; | |
String password; | |
String domain; | |
String mailboxUri; | |
void ListMessagesFromSubFolder(System::SharedPtr<Aspose::Email::Clients::Exchange::ExchangeFolderInfo> publicFolder, System::SharedPtr<Aspose::Email::Clients::Exchange::WebService::IEWSClient> client) | |
{ | |
System::Console::WriteLine(System::String(u"Folder Name: ") + publicFolder->get_DisplayName()); | |
System::SharedPtr<ExchangeMessageInfoCollection> msgInfoCollection = client->ListMessagesFromPublicFolder(publicFolder); | |
for (auto messageInfo : System::IterateOver(msgInfoCollection)) | |
{ | |
System::SharedPtr<MailMessage> msg = client->FetchMessage(messageInfo->get_UniqueUri()); | |
System::Console::WriteLine(msg->get_Subject()); | |
msg->Save(dataDir + msg->get_Subject() + u".msg", SaveOptions::get_DefaultMsgUnicode()); | |
} | |
// Call this method recursively for any subfolders | |
if (publicFolder->get_ChildFolderCount() > 0) | |
{ | |
System::SharedPtr<ExchangeFolderInfoCollection> subfolders = client->ListSubFolders(publicFolder); | |
for (System::SharedPtr<Aspose::Email::Clients::Exchange::ExchangeFolderInfo> subfolder : System::IterateOver(subfolders)) | |
{ | |
ListMessagesFromSubFolder(subfolder, client); | |
} | |
} | |
} | |
void ReadPublicFolders() | |
{ | |
System::SharedPtr<System::Net::NetworkCredential> credential = System::MakeObject<System::Net::NetworkCredential>(username, password, domain); | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
System::SharedPtr<ExchangeFolderInfoCollection> folders = client->ListPublicFolders(); | |
for (auto publicFolder : System::IterateOver(folders)) | |
{ | |
System::Console::WriteLine(System::String(u"Name: ") + publicFolder->get_DisplayName()); | |
System::Console::WriteLine(System::String(u"Subfolders count: ") + publicFolder->get_ChildFolderCount()); | |
ListMessagesFromSubFolder(publicFolder, client); | |
} | |
} | |
void DownloadMessagesFromPublicFolders() | |
{ | |
try | |
{ | |
ReadPublicFolders(); | |
} | |
catch (System::Exception& ex) | |
{ | |
System::Console::WriteLine(ex.get_Message()); | |
} | |
} |
Перемещение сообщений
Вы можете перемещать электронные сообщения из одной папки в другую с помощью метода IEWSClient Move. Он принимает следующие параметры:
- Уникальный URI сообщения, которое необходимо переместить.
- Уникальный URI папки назначения.
Перемещение сообщений между папками
Следующий кодовый Snippet показывает, как переместить сообщение в почтовом ящике из папки «Входящие» в папку под названием «Обработано». В этом примере приложение:
- Читает сообщения из папки «Входящие».
- Обрабатывает некоторые сообщения на основе определенных критериев (в этом примере мы находим ключевое слово в теме сообщения).
- Перемещает сообщения, которые соответствуют данному условию, в папку «Обработано».
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Create instance of IEWSClient class by giving credentials | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
System::SharedPtr<ExchangeMailboxInfo> mailboxInfo = client->GetMailboxInfo(); | |
// List all messages from Inbox folder | |
System::Console::WriteLine(u"Listing all messages from Inbox...."); | |
System::SharedPtr<ExchangeMessageInfoCollection> msgInfoColl = client->ListMessages(mailboxInfo->get_InboxUri()); | |
for (auto msgInfo : System::IterateOver(msgInfoColl)) | |
{ | |
// Move message to "Processed" folder, after processing certain messages based on some criteria | |
if (msgInfo->get_Subject() != nullptr && msgInfo->get_Subject().ToLower().Contains(u"process this message") == true) | |
{ | |
client->MoveItem(mailboxInfo->get_DeletedItemsUri(), msgInfo->get_UniqueUri()); | |
// EWS | |
System::Console::WriteLine(System::String(u"Message moved....") + msgInfo->get_Subject()); | |
} | |
else { } | |
} |
Удаление сообщений
Вы можете удалить электронные сообщения из папки с помощью метода IEWSClient->DeleteMessage. Он принимает уникальный URI сообщения в качестве параметра.
Следующий кодовый Snippet показывает, как удалить сообщение из папки «Входящие». В этом примере код:
- Читает сообщения из папки «Входящие».
- Обрабатывает сообщения на основе определенных критериев (в этом примере мы находим ключевое слово в теме сообщения).
- Удаляет сообщение.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
// Create instance of IEWSClient class by giving credentials | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
System::SharedPtr<ExchangeMailboxInfo> mailboxInfo = client->GetMailboxInfo(); | |
// List all messages from Inbox folder | |
System::Console::WriteLine(u"Listing all messages from Inbox...."); | |
System::SharedPtr<ExchangeMessageInfoCollection> msgInfoColl = client->ListMessages(mailboxInfo->get_InboxUri()); | |
for (auto msgInfo : System::IterateOver(msgInfoColl)) | |
{ | |
// Delete message based on some criteria | |
if (msgInfo->get_Subject() != nullptr && msgInfo->get_Subject().ToLower().Contains(u"delete") == true) | |
{ | |
client->DeleteMessage(msgInfo->get_UniqueUri()); | |
// EWS | |
System::Console::WriteLine(System::String(u"Message deleted....") + msgInfo->get_Subject()); | |
} | |
else { } | |
} |
Копирование сообщений
API Aspose.Email позволяет копировать сообщение из одной папки в другую с помощью метода IEWSClient->CopyItem. Перегруженная версия этого метода возвращает уникальный URI скопированного сообщения, как показано в этой статье.
Копирование сообщения в другую папку
Следующий кодовый Snippet показывает, как скопировать сообщение в другую папку.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C | |
try | |
{ | |
// Create instance of EWSClient class by giving credentials | |
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser()); | |
System::SharedPtr<MailMessage> message = System::MakeObject<MailMessage>(u"from@domain.com", u"to@domain.com", System::String(u"EMAILNET-34997 - ") + System::ObjectExt::ToString(System::Guid::NewGuid()), u"EMAILNET-34997 Exchange: Copy a message and get reference to the new Copy item"); | |
System::String messageUri = client->AppendMessage(message); | |
System::String newMessageUri = client->CopyItem(messageUri, client->get_MailboxInfo()->get_DeletedItemsUri()); | |
} | |
catch (System::Exception& ex) | |
{ | |
System::Console::WriteLine(ex.get_Message()); | |
} |