Updated example and doc with some code showing how to read embedded object data from a file.

This commit is contained in:
Vincent Richard 2006-10-14 08:31:25 +00:00
parent 0894c98959
commit 6139afdbf8
2 changed files with 43 additions and 8 deletions

View File

@ -269,8 +269,10 @@ mb.appendAttachment(att);
\subsection{HTML messages and embedded objects} % ---------------------------- \subsection{HTML messages and embedded objects} % ----------------------------
VMime also supports aggregated messages, which permits to build MIME messages VMime also supports aggregate messages, which permits to build MIME messages
containing HTML text and embedded objects (such as images). containing HTML text and embedded objects (such as images). For more information
about aggregate messages, please read RFC-2557 (\emph{MIME Encapsulation of
Aggregate Documents, such as HTML}).
Creating such messages is quite easy, using the {\vcode vmime::messageBuilder} Creating such messages is quite easy, using the {\vcode vmime::messageBuilder}
object. The following code constructs a message containing text in both plain object. The following code constructs a message containing text in both plain
@ -295,12 +297,13 @@ mb.constructTextPart(vmime::mediaType
vmime::ref <vmime::htmlTextPart> textPart = vmime::ref <vmime::htmlTextPart> textPart =
mb.getTextPart().dynamicCast <vmime::htmlTextPart>(); mb.getTextPart().dynamicCast <vmime::htmlTextPart>();
// -- add the JPEG image (the returned identifier is used to identify the // -- Add the JPEG image (the returned identifier is used to identify the
// -- embedded object in the HTML text, the famous "CID", or "Content-Id") // -- embedded object in the HTML text, the famous "CID", or "Content-Id").
vmime::string id = textPart->addObject("<...image data...>", // -- Note: you can also read data from a file; see the next example.
const vmime::string id = textPart->addObject("<...image data...>",
vmime::mediaType(vmime::mediaTypes::IMAGE, vmime::mediaTypes::IMAGE_JPEG)); vmime::mediaType(vmime::mediaTypes::IMAGE, vmime::mediaTypes::IMAGE_JPEG));
// -- set the text // -- Set the text
textPart->setCharset(vmime::charsets::ISO8859_15); textPart->setCharset(vmime::charsets::ISO8859_15);
textPart->setText(vmime::create <vmime::stringContentHandler> textPart->setText(vmime::create <vmime::stringContentHandler>
@ -321,6 +324,25 @@ multipart/alternative
image/jpeg image/jpeg
\end{verbatim} \end{verbatim}
You can easily tell VMime to read the embedded object data from a file. The
following code opens the file \emph{/path/to/image.jpg}, connects it to an
input stream, then add an embedded object:
\begin{lstlisting}
vmime::utility::fileSystemFactory* fs =
vmime::platform::getHandler()->getFileSystemFactory();
vmime::ref <vmime::utility::file> imageFile =
fs->create(fs->stringToPath("/path/to/image.jpg"));
vmime::ref <vmime::contentHandler> imageCts =
vmime::create <vmime::streamContentHandler>
(imageFile->getFileReader()->getInputStream(), imageFile->getLength());
const vmime::string cid = textPart.addObject(imageCts,
vmime::mediaType(vmime::mediaTypes::IMAGE, vmime::mediaTypes::IMAGE_JPEG));
\end{lstlisting}
% ============================================================================ % ============================================================================
\section{Working with attachments: the attachment helper} \section{Working with attachments: the attachment helper}

View File

@ -73,8 +73,21 @@ int main()
// -- embed an image (the returned "CID" (content identifier) is used to reference // -- embed an image (the returned "CID" (content identifier) is used to reference
// -- the image into HTML content). // -- the image into HTML content).
vmime::string cid = textPart.addObject("<...IMAGE DATA...>", vmime::utility::fileSystemFactory* fs =
vmime::mediaType(vmime::mediaTypes::IMAGE, vmime::mediaTypes::IMAGE_JPEG)); vmime::platform::getHandler()->getFileSystemFactory();
vmime::ref <vmime::utility::file> imageFile =
fs->create(fs->stringToPath("/path/to/image.jpg"));
vmime::ref <vmime::utility::fileReader> fileReader =
imageFile->getFileReader();
vmime::ref <vmime::contentHandler> imageCts =
vmime::create <vmime::streamContentHandler>
(fileReader->getInputStream(), imageFile->getLength());
const vmime::string cid = textPart.addObject(imageCts,
vmime::mediaType(vmime::mediaTypes::IMAGE, vmime::mediaTypes::IMAGE_JPEG));
// -- message text // -- message text
textPart.setText(vmime::create <vmime::stringContentHandler> textPart.setText(vmime::create <vmime::stringContentHandler>