⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pop3message.cpp

📁 MIME解析的代码
💻 CPP
字号:
//// VMime library (http://www.vmime.org)// Copyright (C) 2002-2008 Vincent Richard <vincent@vincent-richard.net>//// This program is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License as// published by the Free Software Foundation; either version 2 of// the License, or (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU// General Public License for more details.//// You should have received a copy of the GNU General Public License along// with this program; if not, write to the Free Software Foundation, Inc.,// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.//// Linking this library statically or dynamically with other modules is making// a combined work based on this library.  Thus, the terms and conditions of// the GNU General Public License cover the whole combination.//#include "vmime/net/pop3/POP3Message.hpp"#include "vmime/net/pop3/POP3Folder.hpp"#include "vmime/net/pop3/POP3Store.hpp"#include <sstream>namespace vmime {namespace net {namespace pop3 {POP3Message::POP3Message(ref <POP3Folder> folder, const int num)	: m_folder(folder), m_num(num), m_size(-1), m_deleted(false){	folder->registerMessage(this);}POP3Message::~POP3Message(){	ref <POP3Folder> folder = m_folder.acquire();	if (folder)		folder->unregisterMessage(this);}void POP3Message::onFolderClosed(){	m_folder = NULL;}int POP3Message::getNumber() const{	return (m_num);}const message::uid POP3Message::getUniqueId() const{	return (m_uid);}int POP3Message::getSize() const{	if (m_size == -1)		throw exceptions::unfetched_object();	return (m_size);}bool POP3Message::isExpunged() const{	return (false);}int POP3Message::getFlags() const{	int flags = FLAG_RECENT;	if (m_deleted)		flags |= FLAG_DELETED;	return (flags);}ref <const structure> POP3Message::getStructure() const{	throw exceptions::operation_not_supported();}ref <structure> POP3Message::getStructure(){	throw exceptions::operation_not_supported();}ref <const header> POP3Message::getHeader() const{	if (m_header == NULL)		throw exceptions::unfetched_object();	return (m_header);}void POP3Message::extract(utility::outputStream& os,	utility::progressListener* progress, const int start,	const int length, const bool /* peek */) const{	ref <const POP3Folder> folder = m_folder.acquire();	if (!folder)		throw exceptions::illegal_state("Folder closed");	else if (!folder->getStore())		throw exceptions::illegal_state("Store disconnected");	if (start != 0 && length != -1)		throw exceptions::partial_fetch_not_supported();	// Emit the "RETR" command	std::ostringstream oss;	oss << "RETR " << m_num;	folder.constCast <POP3Folder>()->m_store.acquire()->sendRequest(oss.str());	try	{		POP3Folder::MessageMap::const_iterator it =			folder->m_messages.find(const_cast <POP3Message*>(this));		const int totalSize = (it != folder.constCast <POP3Folder>()->m_messages.end())			? (*it).second : 0;		folder.constCast <POP3Folder>()->m_store.acquire()->			readResponse(os, progress, totalSize);	}	catch (exceptions::command_error& e)	{		throw exceptions::command_error("RETR", e.response());	}}void POP3Message::extractPart	(ref <const part> /* p */, utility::outputStream& /* os */,	 utility::progressListener* /* progress */,	 const int /* start */, const int /* length */,	 const bool /* peek */) const{	throw exceptions::operation_not_supported();}void POP3Message::fetchPartHeader(ref <part> /* p */){	throw exceptions::operation_not_supported();}void POP3Message::fetch(ref <POP3Folder> msgFolder, const int options){	ref <POP3Folder> folder = m_folder.acquire();	if (folder != msgFolder)		throw exceptions::folder_not_found();	// FETCH_STRUCTURE and FETCH_FLAGS are not supported by POP3.	if (options & (folder::FETCH_STRUCTURE | folder::FETCH_FLAGS))		throw exceptions::operation_not_supported();	// Check for the real need to fetch the full header	static const int optionsRequiringHeader =		folder::FETCH_ENVELOPE | folder::FETCH_CONTENT_INFO |		folder::FETCH_FULL_HEADER | folder::FETCH_IMPORTANCE;	if (!(options & optionsRequiringHeader))		return;	// No need to differenciate between FETCH_ENVELOPE,	// FETCH_CONTENT_INFO, ... since POP3 only permits to	// retrieve the whole header and not fields in particular.	// Emit the "TOP" command	std::ostringstream oss;	oss << "TOP " << m_num << " 0";	folder->m_store.acquire()->sendRequest(oss.str());	try	{		string buffer;		folder->m_store.acquire()->readResponse(buffer, true);		m_header = vmime::create <header>();		m_header->parse(buffer);	}	catch (exceptions::command_error& e)	{		throw exceptions::command_error("TOP", e.response());	}}void POP3Message::setFlags(const int /* flags */, const int /* mode */){	throw exceptions::operation_not_supported();}} // pop3} // net} // vmime

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -