Утилитарные функции

Отправка сообщения с вариантом голосования

Microsoft Outlook позволяет пользователям создавать опрос при составлении нового сообщения. Это делается включением вариантов голосования, таких как Да, Нет, Может быть и т.д. Класс FollowUpOptions, предлагаемый Aspose.Email, предоставляет свойство VotingButtons, которое можно использовать для установки или получения значения вариантов голосования. Эта статья предоставляет подробный пример создания MapiMessage с вариантами голосования для создания опроса, а затем отправки сообщения с использованием клиента Exchange Web Service (EWS).

Создание и отправка сообщения с вариантами голосования

Следующий фрагмент кода показывает, как создать новое сообщение и отправить его с вариантами голосования.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C
System::String address = u"firstname.lastname@aspose.com";
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser());
System::SharedPtr<MailMessage> message = CreateTestMessage(address);
// Set FollowUpOptions Buttons
System::SharedPtr<FollowUpOptions> options = System::MakeObject<FollowUpOptions>();
options->set_VotingButtons(u"Yes;No;Maybe;Exactly!");
try
{
client->Send(message, options);
}
catch (System::Exception& ex)
{
System::Console::WriteLine(ex.get_Message());
}

Следующий фрагмент кода показывает определение метода CreateTestMessage, используемого в приведенном выше примере.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C
System::SharedPtr<MailMessage> CreateTestMessage(System::String address)
{
System::SharedPtr<MailMessage> eml = System::MakeObject<MailMessage>(address, address, u"Flagged message", u"Make it nice and short, but descriptive. The description may appear in search engines' search results pages...");
return eml;
}

Игнорирование или обход недействительного или просроченного SSL сертификата

Aspose.Email может обрабатывать SSL сертификаты на Exchange Server с использованием класса EWSClient. Если SSL сертификат просрочен или стал недействительным, Aspose.Email выбрасывает исключение из-за недействительного SSL сертификата. Избегайте таких ошибок SSL сертификатов, игнорируя их с помощью метода, используемого в приведенном ниже коде. Зарегистрируйте обработчик обратного вызова в вашем методе main() или init() и добавьте метод ниже как член класса.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C
static bool RemoteCertificateValidationHandler(System::SharedPtr<System::Object> sender, System::SharedPtr<System::Security::Cryptography::X509Certificates::X509Certificate> certificate, System::SharedPtr<System::Security::Cryptography::X509Certificates::X509Chain> chain, System::Net::Security::SslPolicyErrors sslPolicyErrors)
{
return true;
//Ignore the checks and go ahead
}
void IgnoringInvalidSSLCertificates()
{
// Register callback method for SSL validation event
System::Net::ServicePointManager::get_ServerCertificateValidationCallback().connect(RemoteCertificateValidationHandler);
}

Создание сообщений RE и FW из MSG файлов

IEWSClient позволяет разработчикам создавать сообщения RE (Ответ/Ответить всем) и FW (Переслать) из исходного сообщения. Исходное сообщение определяется выбором конкретного ExchangeMessageInfo из ExchangeMessageInfoCollection, полученной с помощью ListMessages(). Другим аргументом является фактическое MailMessage, которое будет отправлено как сообщение RE или FW. Следующий фрагмент кода показывает, как отправить сообщение, затем ответить на это сообщение и переслать это сообщение. Чтобы выполнить эту задачу:

  1. Инициализируйте объект IEWSClient, предоставив действительные учетные данные.
  2. Отправьте несколько тестовых сообщений.
  3. Вызовите методы Reply(), ReplyAll() и Forward() для отправки сообщений.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C
System::String dataDir = GetDataDir_Exchange();
const System::String mailboxUri = u"https://exchange.domain.com/ews/Exchange.asmx";
const System::String domain = u"";
const System::String username = u"username";
const System::String password = u"password";
System::SharedPtr<System::Net::NetworkCredential> credential = System::MakeObject<System::Net::NetworkCredential>(username, password, domain);
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser());
try
{
System::SharedPtr<MailMessage> message = System::MakeObject<MailMessage>(u"user@domain.com", u"user@domain.com", System::String(u"TestMailRefw - ") + System::ObjectExt::ToString(System::Guid::NewGuid()), u"TestMailRefw Implement ability to create RE and FW messages from source MSG file");
client->Send(message);
System::SharedPtr<ExchangeMessageInfoCollection> messageInfoCol = client->ListMessages(client->get_MailboxInfo()->get_InboxUri());
if (messageInfoCol->get_Count() == 1)
{
System::Console::WriteLine(u"1 message in Inbox");
}
else
{
System::Console::WriteLine(u"Error! No message in Inbox");
}
System::SharedPtr<MailMessage> message1 = System::MakeObject<MailMessage>(u"user@domain.com", u"user@domain.com", System::String(u"TestMailRefw - ") + System::ObjectExt::ToString(System::Guid::NewGuid()), u"TestMailRefw Implement ability to create RE and FW messages from source MSG file");
client->Send(message1);
messageInfoCol = client->ListMessages(client->get_MailboxInfo()->get_InboxUri());
if (messageInfoCol->get_Count() == 2)
{
System::Console::WriteLine(u"2 messages in Inbox");
}
else
{
System::Console::WriteLine(u"Error! No new message in Inbox");
}
System::SharedPtr<MailMessage> message2 = System::MakeObject<MailMessage>(u"user@domain.com", u"user@domain.com", System::String(u"TestMailRefw - ") + System::ObjectExt::ToString(System::Guid::NewGuid()), u"TestMailRefw Implement ability to create RE and FW messages from source MSG file");
message2->get_Attachments()->Add(Attachment::CreateAttachmentFromString(u"Test attachment 1", u"Attachment Name 1"));
message2->get_Attachments()->Add(Attachment::CreateAttachmentFromString(u"Test attachment 2", u"Attachment Name 2"));
// Reply, Replay All and forward Message
client->Reply(message2, messageInfoCol->idx_get(0));
client->ReplyAll(message2, messageInfoCol->idx_get(0));
client->Forward(message2, messageInfoCol->idx_get(0));
}
catch (System::Exception& ex)
{
System::Console::WriteLine(System::String(u"Error in program") + ex.get_Message());
}

Добавление заголовков в EWS запросы

Aspose.Email API позволяет добавлять заголовки к запросам Exchange. Это может быть использовано для добавления заголовков к EWS запросам для различных целей. Одним из таких примеров может быть добавление заголовка X-AnchorMailbox, который используется для управления проблемами с ограничением на сервере Exchange. Метод AddHeader класса IEWSClient используется для добавления заголовков к запросам EWS, как показано в следующем фрагменте кода.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-C
System::SharedPtr<IEWSClient> client = GetExchangeEWSClient(GetExchangeTestUser());
client->AddHeader(u"X-AnchorMailbox", u"username@domain.com");
System::SharedPtr<ExchangeMessageInfoCollection> messageInfoCol = client->ListMessages(client->get_MailboxInfo()->get_InboxUri());

Работа с унифицированным сообщением

Aspose.Email может извлекать информацию об унифицированном сообщении из Exchange Server 2010. Поддерживается унифицированное сообщение, такое как получение информации о конфигурации, инициирование исходящего звонка, извлечение информации о телефонном звонке по идентификатору вызова и отключение телефонного звонка по идентификатору. Следующий пример кода показывает, как извлечь информацию о конфигурации унифицированного сообщения из Microsoft Exchange Server 2010.

// 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<UnifiedMessagingConfiguration> umConf = client->GetUMConfiguration();

Получение советов по почте

Microsoft Exchange Server добавил несколько новых функций с Exchange Server 2010 и 2013. Одна из них позволяет пользователям получать советы по почте при составлении электронного сообщения. Эти советы очень полезны, так как они предоставляют информацию перед отправкой электронной почты. Например, если адрес электронной почты неверен в списке получателей, отображается совет, чтобы уведомить вас о том, что адрес электронной почты недействителен. Советы по почте также позволяют увидеть автоматические ответы “вне офиса” перед отправкой электронной почты: Exchange Server (2010 и 2013) отправляет совет по почте, когда электронное письмо составляется, если один или несколько получателей установили автоматические ответы “вне офиса”. Для всех функций, продемонстрированных в этой статье, требуется Microsoft Exchange Server 2010 Service Pack 1. Следующий фрагмент кода показывает, как использовать класс EWSClient, который использует Exchange Web Services, доступные в Microsoft Exchange Server 2007 и более поздних версиях.

// 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());
System::Console::WriteLine(u"Connected to Exchange server...");
// Provide mail tips options
System::SharedPtr<MailAddressCollection> addrColl = System::MakeObject<MailAddressCollection>();
addrColl->Add(System::MakeObject<MailAddress>(u"test.exchange@ex2010.local", true));
addrColl->Add(System::MakeObject<MailAddress>(u"invalid.recipient@ex2010.local", true));
System::SharedPtr<GetMailTipsOptions> options = System::MakeObject<GetMailTipsOptions>(MailAddress::to_MailAddress(u"administrator@ex2010.local"), addrColl, Aspose::Email::Clients::Exchange::WebService::MailTipsType::All);
try
{
// Get Mail Tips
System::ArrayPtr<System::SharedPtr<MailTips>> tips = client->GetMailTips(options);
// Display information about each Mail Tip
for (System::SharedPtr<MailTips> tip : tips)
{
// Display Out of office message, if present
if (tip->get_OutOfOffice() != nullptr)
{
System::Console::WriteLine(System::String(u"Out of office: ") + tip->get_OutOfOffice()->get_ReplyBody()->get_Message());
}
// Display the invalid email address in recipient, if present
if (tip->get_InvalidRecipient() == true)
{
System::Console::WriteLine(System::String(u"The recipient address is invalid: ") + tip->get_RecipientAddress());
}
}
}
catch (System::Exception& ex)
{
System::Console::WriteLine(ex.get_Message());
}