Creating
attachments to messages
The messaging framework allows you to create attachments to be
added to messages.
Attachments to
messages are created as empty files before they are filled and added to a
message.
Create an active object implementation. All the MMsvAttachmentManager functions
that modify attachments for an entry are asynchronous, so a request must be
called with an active object implementation.
void CFoo::CreateAttachmentL(CMsvEntry& aEntry )
{
_LIT(KFileName, "textfile.txt");
...
// Wait for request to complete
User::WaitForRequest(status);
// Write to the file at the current offset within the file.
User::LeaveIfError(file.Write(_L8("text file as attachment")));
CleanupStack::PopAndDestroy(&file);
CleanupStack::PopAndDestroy(store);
}
- Get the details
of the message to which you want to add an attachment using CMsvEntry::EditStoreL().
CMsvStore* store = aEntry.EditStoreL();
CleanupStack::PushL(store);
This function returns CMsvStore in writable mode.
- Get an MMsvAttachmentManager attachment
manager for the message entry, using CMsvStore::AttachmentManagerL().
MMsvAttachmentManager& attManager = store->AttachmentManagerL();
Create a new attachment attributes object using the CMsvAttachment::NewL() function.
// create a new attachment attributes object
CMsvAttachment* attachment = CMsvAttachment::NewL(CMsvAttachment::EMsvFile);
CleanupStack::PushL(attachment);
// set attachment file name
attachment->SetAttachmentNameL(KFileName());
Initialise a file handle.
// A file handle
RFile file;
CleanupClosePushL(file);
TRequestStatus status;
Create a new attachment using the MMsvAttachmentManager::CreateAttachmentL() function.
The CreateAttachmentL() function creates a new empty
attachment file and returns an open writable file handle to the empty attachment
file in the Message Store. You must pass an uninitialised file handle. The
file handle cannot be used until the asynchronous request completes successfully.
If the request is successful, the file handle is opened for writing.
// CreateAttachmentL API will return an open writable file handle
// to an empty attachment file in the message store.
attManager.CreateAttachmentL(KFileName, file, attachment, status);
Commit the store.
// Commit the store
store->CommitL();
The result of creating
an attachment is an empty file with a handle opened for writing.
You can now add
the attachment to a file and retrieve and modify it.