An example that shows reading mail.
#include <exception>
#include <vector>
#include <string>
using std::string;
static unsigned int get_message_count(folder& the_folder, session& mapi_session)
{
return messages.size();
}
static void print_folder_tree(folder& up_folder, session& mapi_session, unsigned int deep = 0)
{
property_container up_folder_property_container = up_folder.get_property_container();
up_folder_property_container << PR_DISPLAY_NAME << PR_CONTAINER_CLASS;
up_folder_property_container.fetch();
string display_name = static_cast<const char*>(up_folder_property_container[PR_DISPLAY_NAME]);
string container_class;
if (up_folder_property_container[PR_CONTAINER_CLASS])
container_class = static_cast<const char*>(up_folder_property_container[PR_CONTAINER_CLASS]);
for (unsigned int i = 0; i < deep; ++i) {
cout << "|----> ";
}
cout << display_name << " (id: " << up_folder.get_id() << ") (messages: " << get_message_count(up_folder, mapi_session) << ")"
<< " container class: " << container_class << endl;
for (unsigned int i = 0; i < hierarchy.size(); ++i) {
print_folder_tree(*hierarchy[i], mapi_session, deep+1);
}
}
int main ()
{
try {
session mapi_session;
mapi_session.login();
property_container store_properties = mapi_session.get_message_store().get_property_container();
store_properties << PR_DISPLAY_NAME;
store_properties.fetch();
cout << "Mailbox Name: " << static_cast<const char*>(*store_properties.begin()) << endl;
mapi_id_t inbox_id = mapi_session.get_message_store().get_default_folder(olFolderInbox);
cout << "inbox_id: " << inbox_id << endl;
folder inbox_folder(mapi_session.get_message_store(), inbox_id);
cout << "Inbox size: " << messages.size() << endl;
if (messages.size() > 0) {
property_container message_property_container = messages[0]->get_property_container();
message_property_container << PR_DISPLAY_TO << PR_CONVERSATION_TOPIC;
message_property_container.fetch_all();
string to;
string subject;
{
if (Iter.get_tag() == PR_DISPLAY_TO)
to = (const char*) *Iter;
else if (Iter.get_tag() == PR_CONVERSATION_TOPIC)
subject = (const char*) *Iter;
}
cout << "To: " << to << endl;
cout << "Subject: " << subject << endl;
}
mapi_id_t top_folder_id = mapi_session.get_message_store().get_default_folder(olFolderTopInformationStore);
folder top_folder(mapi_session.get_message_store(), top_folder_id);
print_folder_tree(top_folder, mapi_session);
cout << "finished session" << endl;
}
catch (mapi_exception &e)
{
cout << "MAPI Exception @ main: " << e.what() << endl;
}
catch (std::runtime_error &e)
{
cout << "std::runtime_error exception @ main: " << e.what() << endl;
}
return 0;
}
std::vector< message_shared_ptr > message_container_type
Definition: folder.h:46
std::vector< folder_shared_ptr > hierarchy_container_type
Hierarchy folders.
Definition: folder.h:58
property_container_iterator iterator
Definition: property_container.h:162
The libmapi++ classes and other definitions are all enclosed in the libmapipp namespace.
Definition: attachment.h:32