Demonstrates extraction of attachments from a message in a remote store.
This commit is contained in:
parent
3fe31cbc0a
commit
dc5f9fd6e6
@ -615,6 +615,7 @@ static void connectStore()
|
|||||||
choices.push_back("Show message header");
|
choices.push_back("Show message header");
|
||||||
choices.push_back("Show message envelope");
|
choices.push_back("Show message envelope");
|
||||||
choices.push_back("Extract whole message");
|
choices.push_back("Extract whole message");
|
||||||
|
choices.push_back("Extract attachments");
|
||||||
choices.push_back("Status");
|
choices.push_back("Status");
|
||||||
choices.push_back("List folders");
|
choices.push_back("List folders");
|
||||||
choices.push_back("Change folder");
|
choices.push_back("Change folder");
|
||||||
@ -627,7 +628,8 @@ static void connectStore()
|
|||||||
// Request message number
|
// Request message number
|
||||||
vmime::shared_ptr <vmime::net::message> msg;
|
vmime::shared_ptr <vmime::net::message> msg;
|
||||||
|
|
||||||
if (choice == 1 || choice == 2 || choice == 3 || choice == 4 || choice == 5 || choice == 10)
|
if (choice == 1 || choice == 2 || choice == 3 || choice == 4 ||
|
||||||
|
choice == 5 || choice == 6 || choice == 11)
|
||||||
{
|
{
|
||||||
std::cout << "Enter message number: ";
|
std::cout << "Enter message number: ";
|
||||||
std::cout.flush();
|
std::cout.flush();
|
||||||
@ -723,8 +725,72 @@ static void connectStore()
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Status
|
// Extract attachments
|
||||||
case 6:
|
case 6:
|
||||||
|
{
|
||||||
|
vmime::shared_ptr <vmime::message> parsedMsg = msg->getParsedMessage();
|
||||||
|
|
||||||
|
std::vector <vmime::shared_ptr <const vmime::attachment> > attchs =
|
||||||
|
vmime::attachmentHelper::findAttachmentsInMessage(parsedMsg);
|
||||||
|
|
||||||
|
if (attchs.size() > 0)
|
||||||
|
{
|
||||||
|
std::cout << attchs.size() << " attachments found." << std::endl;
|
||||||
|
|
||||||
|
for (std::vector <vmime::shared_ptr <const vmime::attachment> >::iterator
|
||||||
|
it = attchs.begin() ; it != attchs.end() ; ++it)
|
||||||
|
{
|
||||||
|
vmime::shared_ptr <const vmime::attachment> att = *it;
|
||||||
|
|
||||||
|
// Get attachment size
|
||||||
|
vmime::size_t size = 0;
|
||||||
|
|
||||||
|
if (att->getData()->isEncoded())
|
||||||
|
size = att->getData()->getEncoding().getEncoder()->getDecodedSize(att->getData()->getLength());
|
||||||
|
else
|
||||||
|
size = att->getData()->getLength();
|
||||||
|
|
||||||
|
std::cout << "Found attachment '" << att->getName().getBuffer() << "'"
|
||||||
|
<< ", size is " << size << " bytes:" << std::endl;
|
||||||
|
|
||||||
|
// Get attachment data
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << "========== BEGIN CONTENT ==========" << std::endl;
|
||||||
|
|
||||||
|
vmime::utility::outputStreamAdapter osa(std::cout);
|
||||||
|
att->getData()->extract(osa);
|
||||||
|
|
||||||
|
std::cout << std::endl;
|
||||||
|
std::cout << "========== END CONTENT ==========" << std::endl;
|
||||||
|
|
||||||
|
// Or write it to a file
|
||||||
|
/*
|
||||||
|
vmime::shared_ptr <vmime::utility::fileSystemFactory> fsf
|
||||||
|
= vmime::platform::getHandler()->getFileSystemFactory();
|
||||||
|
|
||||||
|
vmime::shared_ptr <vmime::utility::file> file
|
||||||
|
= fsf->create(vmime::utility::path::fromString
|
||||||
|
("/path/to/attachment-file", "/", vmime::charsets::UTF_8));
|
||||||
|
// -or- ("C:\\Temp\\attachment-file", "\\", vmime::charsets::UTF_8));
|
||||||
|
|
||||||
|
file->createFile();
|
||||||
|
|
||||||
|
vmime::shared_ptr <vmime::utility::outputStream> output =
|
||||||
|
file->getFileWriter()->getOutputStream();
|
||||||
|
|
||||||
|
att->getData()->extract(*output.get());
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cout << "No attachments found." << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Status
|
||||||
|
case 7:
|
||||||
{
|
{
|
||||||
int count, unseen;
|
int count, unseen;
|
||||||
f->status(count, unseen);
|
f->status(count, unseen);
|
||||||
@ -733,7 +799,7 @@ static void connectStore()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// List folders
|
// List folders
|
||||||
case 7:
|
case 8:
|
||||||
{
|
{
|
||||||
vmime::shared_ptr <vmime::net::folder>
|
vmime::shared_ptr <vmime::net::folder>
|
||||||
root = st->getRootFolder();
|
root = st->getRootFolder();
|
||||||
@ -742,7 +808,7 @@ static void connectStore()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Change folder
|
// Change folder
|
||||||
case 8:
|
case 9:
|
||||||
{
|
{
|
||||||
std::cout << "Enter folder path (eg. /root/subfolder):" << std::endl;
|
std::cout << "Enter folder path (eg. /root/subfolder):" << std::endl;
|
||||||
std::cout.flush();
|
std::cout.flush();
|
||||||
@ -780,7 +846,7 @@ static void connectStore()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Add message
|
// Add message
|
||||||
case 9:
|
case 10:
|
||||||
{
|
{
|
||||||
vmime::messageBuilder mb;
|
vmime::messageBuilder mb;
|
||||||
|
|
||||||
@ -828,7 +894,7 @@ static void connectStore()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Copy message
|
// Copy message
|
||||||
case 10:
|
case 11:
|
||||||
{
|
{
|
||||||
vmime::net::messageSet set = f->copyMessages(f->getFullPath(),
|
vmime::net::messageSet set = f->copyMessages(f->getFullPath(),
|
||||||
vmime::net::messageSet::byNumber(msg->getNumber()));
|
vmime::net::messageSet::byNumber(msg->getNumber()));
|
||||||
@ -863,7 +929,7 @@ static void connectStore()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Main menu
|
// Main menu
|
||||||
case 11:
|
case 12:
|
||||||
|
|
||||||
f->close(true); // 'true' to expunge deleted messages
|
f->close(true); // 'true' to expunge deleted messages
|
||||||
cont = false;
|
cont = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user