MailBee.NET Objects 4.0

Imap.UploadMessage Method (MailMessage, String, String, DateTime)

Uploads a mail message to the specified folder and assigns the specified date and flags to this message.

public bool UploadMessage(
   MailMessage msg,
   string folderName,
   string flags,
   DateTime dt
);

Parameters

msg
A reference to the MailMessage object representing the message to be uploaded.
folderName
The full name of the folder to upload the message to.
flags
The string containing the message flags (in IMAP4 format) to be assigned to the message, or a null reference (Nothing in Visual Basic) to set default flags at the discretion of the server.
dt
The datetime to be assigned to the INTERNALDATE attribute of the message (the date of receiving the message by the server).

Return Value

true if the message was uploaded successfully; otherwise, false.

Remarks

This method implements APPEND command of the IMAP4 protocol.

To upload a file, the developer can first load it into MailMessage object using LoadMessage method, and then call UploadMessage passing a reference to this MailMessage object. There is no extra overhead on parsing the message since LoadMessage just reads a file into memory. The MailMessage won't parse the contained message unless the application starts accessing its properties or methods (so-called "lazy" model).

To upload a mail message just sent using Smtp component, the developer call UploadMessage method passing a reference to the Message property.

To obtain the UID value assigned to the uploaded message, the developer should either examine DestUidString property of UidPlusResult object passed in res parameter of UploadMessage method (the server must support UIDPLUS capability), or obtain UidNext value calling GetFolderStatus method before making upload (this approach is compatible with all servers).

To get standard message flags as string in IMAP4 format (e.g. "\Seen \Flagged"), the developer can use SystemFlagsToString method.

In addition to the flags specified by the application, the server also sets "\Recent" flag. Thus, the uploaded message will always have at least "\Recent" flag set.

Exceptions

Exception TypeCondition
MailBeeExceptionAn error occurred and ThrowExceptions is true.

Example

This sample creates a new mail message and saves it into "Draft" folder (creating the folder if necessary) assigning the current datetime/timezone of the local computer and setting "\Draft" flag. Also, the server will implicitly add "\Recent" flag.

[C#]
using System;
using MailBee;
using MailBee.ImapMail;
using MailBee.Mime;

class Sample
{
    static void Main(string[] args)
    {
        Imap imp = new Imap();

        // Connect to the server and log in the account.
        imp.Connect("imap4.company.com");
        imp.Login("jdoe", "secret");

        // Create a new message. Assume we need to save a draft of the message.
        MailMessage msg = new MailMessage();

        // Create Draft folder if needed.
        FolderCollection folders = imp.DownloadFolders(false, null, "Draft");
        if (folders.Count == 0)
        {
            imp.CreateFolder("Draft");
        }

        // Upload the message and assign the current datetime and timezone
        // of the client as the date of receiving the message by the server
        // (INTERNALDATE in IMAP4 terms). 
        // "\Draft" string is set directly. Alternatively, we could have
        // used MessageFlagSet.SystemFlagsToString(SystemMessageFlags.Draft);
        imp.UploadMessage(msg, "Draft", @"\Draft", DateTime.Now);

        // Disconnect from the server.
        imp.Disconnect();
    }
}
[Visual Basic]
Imports System
Imports MailBee
Imports MailBee.ImapMail
Imports MailBee.Mime

Module Sample
    Sub Main()
        Dim imp As New Imap

        ' Connect to the server and log in the account.
        imp.Connect("mail.domain.com")
        imp.Login("jdoe", "secret")

        ' Create a new message. Assume we need to save a draft of the message.
        Dim msg As New MailMessage

        ' Create Draft folder if needed.
        Dim folders As FolderCollection = imp.DownloadFolders(False, Nothing, "Draft")

        If (folders.Count = 0) Then
            imp.CreateFolder("Draft")
        End If

        ' Upload the message and assign the current datetime and timezone
        ' of the client as the date of receiving the message by the server
        ' (INTERNALDATE in IMAP4 terms). 
        ' "\Draft" string is set directly. Alternatively, we could have
        ' used MessageFlagSet.SystemFlagsToString(SystemMessageFlags.Draft)
        imp.UploadMessage(msg, "Draft", "\Draft", DateTime.Now)

        ' Disconnect from the server.
        imp.Disconnect()
    End Sub
End Module

See Also

Imap Class | MailBee.ImapMail Namespace | Imap.UploadMessage Overload List