void testSetImportanceImpl(const vmime::misc::importanceHelper::Importance i,
		const std::string& ImportanceValue, const std::string& XPriorityValue)
	{
		vmime::ref <vmime::header> hdr = vmime::create <vmime::header>();

		vmime::misc::importanceHelper::setImportanceHeader(hdr, i);

		VASSERT_NO_THROW("1", hdr->findField("Importance"));
		VASSERT_EQ("2", ImportanceValue, hdr->findField("Importance")->getValue()->generate());

		VASSERT_NO_THROW("3", hdr->findField("X-Priority"));
		VASSERT_EQ("4", XPriorityValue, hdr->findField("X-Priority")->getValue()->generate());
	}
Esempio n. 2
0
	// For Apple iCloud/Exchange IMAP server
	void testContinueReqWithoutSpace()
	{
		// continue_req   ::= "+" SPACE (resp_text / base64)
		//
		// Some servers do not send SPACE when response text is empty.
		// IMAP parser should allow this in non-strict mode.
		//
		// Eg:
		//
		//   C: a002 AUTHENTICATE xxx[CR][LF]
		//   S: +[CR][LF]

		vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>();
		vmime::shared_ptr <vmime::net::timeoutHandler> toh = vmime::make_shared <testTimeoutHandler>();

		vmime::shared_ptr <vmime::net::imap::IMAPTag> tag =
				vmime::make_shared <vmime::net::imap::IMAPTag>();

		socket->localSend("+\r\n");

		vmime::shared_ptr <vmime::net::imap::IMAPParser> parser =
				vmime::make_shared <vmime::net::imap::IMAPParser>
						(tag, vmime::dynamicCast <vmime::net::socket>(socket), toh);

		parser->setStrict(false);
		VASSERT_NO_THROW("non-strict mode", parser->readResponse());

		++(*tag);

		socket->localSend("+\r\n");

		parser->setStrict(true);
		VASSERT_THROW("strict mode", parser->readResponse(), vmime::exceptions::invalid_response);
	}
Esempio n. 3
0
	VMIME_TEST_LIST_END


	// For Apple iCloud IMAP server
	void testExtraSpaceInCapaResponse()
	{
		vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>();
		vmime::shared_ptr <vmime::net::timeoutHandler> toh = vmime::make_shared <testTimeoutHandler>();

		vmime::shared_ptr <vmime::net::imap::IMAPTag> tag =
			vmime::make_shared <vmime::net::imap::IMAPTag>();

		socket->localSend(
			"* CAPABILITY IMAP4rev1 AUTH=ATOKEN AUTH=PLAIN \r\n"  // extra space at end
			"a001 OK Capability completed.\r\n");

		vmime::shared_ptr <vmime::net::imap::IMAPParser> parser =
			vmime::make_shared <vmime::net::imap::IMAPParser>
				(tag, vmime::dynamicCast <vmime::net::socket>(socket), toh);

		parser->setStrict(false);
		VASSERT_NO_THROW("non-strict mode", parser->readResponse(/* literalHandler */ NULL));

		++(*tag);

		socket->localSend(
			"* CAPABILITY IMAP4rev1 AUTH=ATOKEN AUTH=PLAIN \r\n"  // extra space at end
			"a002 OK Capability completed.\r\n");

		parser->setStrict(true);
		VASSERT_THROW("strict mode", parser->readResponse(/* literalHandler */ NULL), vmime::exceptions::invalid_response);
	}
Esempio n. 4
0
void testMAILandRCPT()
{
    vmime::ref <vmime::net::session> session =
        vmime::create <vmime::net::session>();

    vmime::ref <vmime::net::transport> tr = session->getTransport
                                            (vmime::utility::url("smtp://localhost"));

    tr->setSocketFactory(vmime::create <testSocketFactory <MAILandRCPTSMTPTestSocket> >());
    tr->setTimeoutHandlerFactory(vmime::create <testTimeoutHandlerFactory>());

    VASSERT_NO_THROW("Connection", tr->connect());

    vmime::mailbox exp("*****@*****.**");

    vmime::mailboxList recips;
    recips.appendMailbox(vmime::create <vmime::mailbox>("*****@*****.**"));
    recips.appendMailbox(vmime::create <vmime::mailbox>("*****@*****.**"));
    recips.appendMailbox(vmime::create <vmime::mailbox>("*****@*****.**"));

    vmime::string data("Message data");
    vmime::utility::inputStreamStringAdapter is(data);

    tr->send(exp, recips, is, 0);
}
Esempio n. 5
0
	// When an IMAP4 client sends a FETCH (bodystructure) request to a server
	// that is running the Exchange Server 2007 IMAP4 service, a corrupted
	// response is sent as a reply
	// --> http://support.microsoft.com/kb/975918/en-us
	void testNILValueInBodyFldEnc()
	{
		vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>();
		vmime::shared_ptr <vmime::net::timeoutHandler> toh = vmime::make_shared <testTimeoutHandler>();

		vmime::shared_ptr <vmime::net::imap::IMAPTag> tag =
				vmime::make_shared <vmime::net::imap::IMAPTag>();

		const char* resp = "* 7970 FETCH (UID 8036 FLAGS () BODYSTRUCTURE (\"text\" \"html\" (\"charset\" \"utf-8\") NIL NIL NIL 175501 1651 NIL NIL NIL NIL) RFC822.HEADER {3}\r\nx\r\n)\r\na001 OK FETCH complete\r\n";

		socket->localSend(resp);

		vmime::shared_ptr <vmime::net::imap::IMAPParser> parser =
			vmime::make_shared <vmime::net::imap::IMAPParser>();

		parser->setTag(tag);
		parser->setSocket(socket);
		parser->setTimeoutHandler(toh);

		parser->setStrict(false);
		VASSERT_NO_THROW("non-strict mode", parser->readResponse());

		++(*tag);

		socket->localSend(resp);

		parser->setStrict(true);
		VASSERT_THROW("strict mode", parser->readResponse(), vmime::exceptions::invalid_response);
	}
Esempio n. 6
0
	VMIME_TEST_LIST_END


	void testBadValueType()
	{
		vmime::headerFieldFactory *hfactory = vmime::headerFieldFactory::getInstance();

		// "To" header field accepts values of type "addressList"
		vmime::ref <vmime::headerField> to = hfactory->create(vmime::fields::TO);
		VASSERT_THROW("to",
			to->setValue(vmime::mailbox("*****@*****.**")),
			vmime::exceptions::bad_field_value_type);

		// Unregistered header field accepts any value type
		vmime::ref <vmime::headerField> custom = hfactory->create("X-MyCustomHeader");
		VASSERT_NO_THROW("custom/1",
			custom->setValue(vmime::mailbox("*****@*****.**")));
		VASSERT_NO_THROW("custom/2",
			custom->setValue(vmime::text("field value text")));
	}
	VMIME_TEST_LIST_END


	// resetImportance

	void testResetImportance()
	{
		vmime::ref <vmime::header> hdr = vmime::create <vmime::header>();

		hdr->getField("Importance")->setValue("xxx");
		hdr->getField("X-Priority")->setValue("yyy");

		VASSERT_NO_THROW("1", hdr->findField("Importance"));
		VASSERT_NO_THROW("2", hdr->findField("X-Priority"));

		vmime::misc::importanceHelper::resetImportanceHeader(hdr);

		VASSERT_THROW("3", hdr->findField("Importance"), vmime::exceptions::no_such_field);
		VASSERT_THROW("4", hdr->findField("X-Priority"), vmime::exceptions::no_such_field);
	}
Esempio n. 8
0
VMIME_TEST_LIST_END


// resetImportance

void testResetImportance()
{
    vmime::shared_ptr <vmime::header> hdr = vmime::make_shared <vmime::header>();

    hdr->getField("Importance")->setValue("xxx");
    hdr->getField("X-Priority")->setValue("yyy");

    VASSERT_NO_THROW("1", hdr->findField("Importance"));
    VASSERT_NO_THROW("2", hdr->findField("X-Priority"));

    vmime::misc::importanceHelper::resetImportanceHeader(hdr);

    VASSERT_NULL("3", hdr->findField("Importance"));
    VASSERT_NULL("4", hdr->findField("X-Priority"));
}
	void testCreateFolderImpl(const vmime::string* const dirs, const vmime::string* const files)
	{
		createMaildir(dirs, files);

		vmime::ref <vmime::net::store> store = createAndConnectStore();
		vmime::ref <vmime::net::folder> rootFolder = store->getRootFolder();

		VASSERT("Before", !store->getFolder(fpath() / "Folder" / "NewFolder")->exists());

		VASSERT_NO_THROW("Creation", store->getFolder(fpath() / "Folder" / "NewFolder")->
			create(vmime::net::folder::TYPE_CONTAINS_MESSAGES));

		VASSERT("After", store->getFolder(fpath() / "Folder" / "NewFolder")->exists());

		destroyMaildir();
	}
Esempio n. 10
0
	// "body_fld_lang" is optional after "body_fld_dsp" in "body_ext_mpart" (Yahoo)
	void testFETCHResponse_optional_body_fld_lang()
	{
		vmime::shared_ptr <testSocket> socket = vmime::make_shared <testSocket>();
		vmime::shared_ptr <vmime::net::timeoutHandler> toh = vmime::make_shared <testTimeoutHandler>();

		vmime::shared_ptr <vmime::net::imap::IMAPTag> tag =
				vmime::make_shared <vmime::net::imap::IMAPTag>();

		const char* resp = "* 1 FETCH (UID 7 RFC822.SIZE 694142 BODYSTRUCTURE (((\"text\" \"plain\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 0 0 NIL NIL NIL NIL)(\"text\" \"html\" (\"charset\" \"utf-8\") NIL NIL \"7bit\" 193 0 NIL NIL NIL NIL) \"alternative\" (\"boundary\" \"----=_Part_536_109505883.1410847112666\") NIL)(\"image\" \"jpeg\" NIL \"<*****@*****.**>\" NIL \"base64\" 351784 NIL (\"attachment\" (\"name\" \"att2\" \"filename\" \"9.jpg\")) NIL NIL)(\"image\" \"jpeg\" NIL \"<*****@*****.**>\" NIL \"base64\" 337676 NIL (\"attachment\" (\"name\" \"att3\" \"filename\" \"10.jpg\")) NIL NIL) \"mixed\" (\"boundary\" \"----=_Part_537_1371134700.1410847112668\") NIL) RFC822.HEADER {3}\r\nx\r\n)\r\na001 OK FETCH complete\r\n";

		socket->localSend(resp);

		vmime::shared_ptr <vmime::net::imap::IMAPParser> parser =
			vmime::make_shared <vmime::net::imap::IMAPParser>();

		parser->setTag(tag);
		parser->setSocket(socket);
		parser->setTimeoutHandler(toh);

		VASSERT_NO_THROW("parse", parser->readResponse());
	}