Microsoft.Graph send mail with attachment
Using the sample above from GitHub this is resolved, see below:
// Create the message with attachment.
byte[] contentBytes = System.IO.File.ReadAllBytes(@"C:\test\test.png");
string contentType = "image/png";
MessageAttachmentsCollectionPage attachments = new MessageAttachmentsCollectionPage();
attachments.Add(new FileAttachment
{
ODataType = "#microsoft.graph.fileAttachment",
ContentBytes = contentBytes,
ContentType = contentType,
ContentId = "testing",
Name = "testing.png"
});
Message email = new Message
{
Body = new ItemBody
{
Content = Resource.Prop_Body + guid,
ContentType = BodyType.Text,
},
Subject = Resource.Prop_Subject + guid.Substring(0, 8),
ToRecipients = recipients,
Attachments = attachments
};
// Send the message.
await graphClient.Me.SendMail(email, true).Request().PostAsync();
I'm not quite sure what exactly is going here without seeing a trace of what is being set in the request, an error message, or a http status code. I do know that you can't set the HasAttachments property, that property is only set by the service. Oh, the issue here is that you're setting the Message.Attachments property as a new[] instead of a new MessageAttachmentsCollectionPage. With that said, I just ran the following code and it worked as expected so we know the service will work for this scenario.
var message = await createEmail("Sent from the MailSendMailWithAttachment test.");
var attachment = new FileAttachment();
attachment.ODataType = "#microsoft.graph.fileAttachment";
attachment.Name = "MyFileAttachment.txt";
attachment.ContentBytes = Microsoft.Graph.Test.Properties.Resources.textfile;
message.Attachments = new MessageAttachmentsCollectionPage();
message.Attachments.Add(attachment);
await graphClient.Me.SendMail(message, true).Request().PostAsync();
I hope this helps and saves you time.
Update: This is using Microsoft.Graph.