Rebex Graph

.NET client library for MS Graph API (Exchange Online)

Download 30-day free trial Buy from $199
More .NET libraries

Back to feature list...

Sending e-mails

The sample code on this page assumes you have already connected and authenticated to Microsoft 365 (Exchange Online) server.

Sending a new mail message 

To send an e-mail message, create an instance of MailMessage class and call GraphClient.SendMessage() method:

// prepare e-mail
var mail = new Rebex.Mail.MailMessage();
mail.Sender = "alice@example.org"; // not needed
mail.From = "alice@example.org"; // not needed
mail.To = "bob@example.org";
mail.Subject = "Sent using Rebex Graph";
mail.BodyText = "Hello world!";
mail.BodyHtml = "<strong>Hello world!</strong>";
// ...

// create Graph client instance, connect, log in
// ...

// send the message
client.SendMessage(mail);

Note: You don't need to specify the 'From' address unless you are sending e-mail on behalf of another user. The server will add the field for you.

Sending an existing draft message 

To send an e-mail message that is already stored at the Exchange server, determine its ID and use the following SendMessage() overload:

// create Graph client instance, connect, log in
// ...

// message is sent according to the "TO", "CC" and "BCC" fields
// it is saved to "Sent Items"
client.SendMessage(messageId);

Sending from a file or stream 

To send an e-mail message from a file or a stream, load the mail into MailMessage and send it:

// load message from a stream (or a file)
var mail = new Rebex.Mail.MailMessage();
mail.Load(stream);

// send the message
client.SendMessage(mail);

Sending e-mail on behalf of another user 

To send an e-mail message on behalf of another address, use MailMessage.From to specify the desired `From` address. The `Sender` address will still reflect the currently authenticated user.

// prepare e-mail
var mail = new Rebex.Mail.MailMessage();
mail.Sender = "alice@example.org"; // not needed
mail.From = "joe@example.org";
mail.To = "bob@example.org";
// ...

// create Graph client instance, connect
// ...

// login with senders (Alice) OAuth access token
client.Login(token);

// Alice sends mail on behalf of Joe (to Bob)
client.SendMessage(mail);
Note: For this to work, mailbox access permissions have to be properly configured at the server:
  1. No permissions - sender cannot impersonate another address or send e-mail on its behalf.
  2. Send on behalf - sender can send an e-mail on behalf of another address.
  3. Send as - sender can impersonate the other address.

Instructing the receiver to send replies to another address 

To request that replies are delivered to a different address, specify the MailMessage.ReplyTo property:

// prepare e-mail
var mail = new Rebex.Mail.MailMessage();
mail.From = "alice@example.org";
mail.To = "bob@example.org";
mail.ReplyTo = "joe@example.org";
// ...

// send mail from Alice, but request that replies go to Joe
client.SendMessage(mail);

Sending replies 

To create a reply to a message, use MailMessage.CreateReply() method:

// create Graph client instance, connect
// ...

// login with senders (Alice) OAuth access token
client.Login(token);

// download a message to reply to
MailMessage original = client.GetMailMessage(messageId);

// reply to all; from logged-on (Alice) account
MailMessage reply = original.CreateReply("alice@example.org", ReplyBodyTransformation.None, true);
reply.BodyText = "Hello, I agree.\n" + original.BodyText;

// send the reply
client.SendMessage(reply);

Forwarding messages 

To forward a message to another address, copy the required fields and add the original message as an attachment:

// download a message to forward
MailMessage original = client.GetMailMessage(messageId);

// prepare forwarded message
MailMessage forward = new MailMessage();
forward.To = "bob@example.org";
forward.Subject = "FW: " + original.Subject;
forward.BodyText = "Hello, I am forwarding this to you:\n\n" + original.BodyText;

// include original message as attachment
forward.Attachments.Add(new Attachment(original));

// send it
client.SendMessage(forward);

Back to feature list...