void WriteEmail(MojRefCountedPtr<AsyncEmailWriter> writer, std::string& output)
{
	// Write to a counter output stream
	MojRefCountedPtr<CounterOutputStream> counter( new CounterOutputStream() );
	writer->SetOutputStream(counter);

	MojRefCountedPtr<AsyncEmailWriterResult> writeResult(new AsyncEmailWriterResult());
	writer->WriteEmail(writeResult->GetSlot());

	// Make sure it's done writing
	ASSERT_TRUE( writeResult->Done() );

	// Check if any exceptions were reported
	ASSERT_TRUE( !writeResult->GetException() );

	// Now write it again to a buffer
	writeResult.reset(new AsyncEmailWriterResult());

	MojRefCountedPtr<ByteBufferOutputStream> bbos( new ByteBufferOutputStream() );
	writer->SetOutputStream(bbos);

	writer->WriteEmail(writeResult->GetSlot());

	// Make sure it's done writing
	ASSERT_TRUE( writeResult->Done() );

	// Check if any exceptions were reported
	ASSERT_TRUE( !writeResult->GetException() );
	
	// Read generated email into output string
	ReadBuffer(output, bbos.get());
	
	// Make sure the count matches the actual bytes written
	ASSERT_EQ(counter->GetBytesWritten(), output.size());
}