ImapUploadMessage Method (MailMessage, String, SystemMessageFlags)
Uploads a mail message to the specified folder and assigns the specified flags to this message.

Namespace: MailBee.ImapMail
Assembly: MailBee.NET (in MailBee.NET.dll) Version: 12.4 build 677 for .NET 4.5
Syntax
public bool UploadMessage(
	MailMessage msg,
	string folderName,
	SystemMessageFlags systemFlags
)

Parameters

msg
Type: MailBee.MimeMailMessage
A reference to the MailMessage object representing the message to be uploaded.
folderName
Type: SystemString
The full name of the folder to upload the message to.
systemFlags
Type: MailBee.ImapMailSystemMessageFlags
A set of flags to be assigned to the message.

Return Value

Type: Boolean
true if the message was uploaded successfully; otherwise, false.
Exceptions
ExceptionCondition
MailBeeExceptionAn error occurred and ThrowExceptions is true.
Remarks

This method implements APPEND command of the IMAP4 protocol. The uploaded message will have the specified flags assigned + "\Recent" flag which is always added by the server for uploaded messages. The date of receiving the message by the server (INTERNALDATE in IMAP4 terms) will be set to the current datetime/timezone of the local computer (not the mail server).

To upload a file, the developer can first load it into MailMessage object using LoadMessage(String) method, and then call UploadMessage(MailMessage, String, String, String, Boolean, UidPlusResult) passing a reference to this MailMessage object. There is no extra overhead on parsing the message since LoadMessage(String) 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(MailMessage, String, String, String, Boolean, UidPlusResult) 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(MailMessage, String, String, String, Boolean, UidPlusResult) method (the server must support UIDPLUS capability), or obtain UidNext value calling GetFolderStatus(String) method before making upload (this approach is compatible with all servers).

Examples

This sample sends a mail message using Smtp component and then uploads it into "Sent" folder setting "\Seen" and "\Answered" flags.

The sample assumes "Sent" folder had already been created in the past. To learn how to make sure the folder exists, see UploadMessage(MailMessage, String, String, DateTime) or UploadMessage(MailMessage, String, String, String) samples.

using System;
using MailBee;
using MailBee.ImapMail;
using MailBee.SmtpMail;
using MailBee.Mime;

class Sample
{
    static void Main(string[] args)
    {
        // Send the message using Smtp object.
        Smtp mailer = new Smtp();

        // Send directly (via MX lookup). To send via SMTP server,
        // comment the next line and uncomment 2nd or 3rd statement below.
        mailer.DnsServers.Autodetect();

        // Uncomment to send via SMTP server not using SMTP authentication.
        // mailer.SmtpServers.Add("smtp.host.com");

        // Uncomment to send via SMTP server using SMTP authentication.    
        // mailer.SmtpServers.Add("smtp.host.com", "jdoe", "secret");

        mailer.From = new EmailAddress("jdoe@host.com", "John Doe");
        mailer.To.Add("sally@company.com", "Sally Smith");
        mailer.Subject = "Annual report";
        mailer.BodyPlainText = "The report contents";
        mailer.Send();

        Imap imp = new Imap();

        imp.Log.Filename = @"C:\Temp\log.txt";
        imp.Log.Enabled = true;
        imp.Log.Clear();

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

        // Upload the message just sent into "Sent" folder and set
        // \Seen and \Answered flags.
        imp.UploadMessage(mailer.Message, "Sent",
            SystemMessageFlags.Seen | SystemMessageFlags.Answered);

        // Disconnect from the server.
        imp.Disconnect();
    }
}
See Also