As the title, is MailKit supported to send file?
If yes, how can I do it?
MailKit is an Open Source cross-platform . NET mail-client library that is based on MimeKit and optimized for mobile devices. Features include: * HTTP, Socks4, Socks4a and Socks5 proxy support.
Yes. This is explained in the documentation as well as the FAQ.
From the FAQ:
To construct a message with attachments, the first thing you'll need to do is create a multipart/mixed
container which you'll then want to add the message body to first. Once you've added the body, you can then add MIME parts to it that contain the content of the files you'd like to attach, being sure to set the Content-Disposition
header value to the attachment. You'll probably also want to set the filename
parameter on the Content-Disposition
header as well as the name
parameter on the Content-Type
header. The most convenient way to do this is to simply use the MimePart.FileName property which will set both parameters for you as well as setting the Content-Disposition
header value to attachment
if it has not already been set to something else.
var message = new MimeMessage (); message.From.Add (new MailboxAddress ("Joey", "[email protected]")); message.To.Add (new MailboxAddress ("Alice", "[email protected]")); message.Subject = "How you doin?"; // create our message text, just like before (except don't set it as the message.Body) var body = new TextPart ("plain") { Text = @"Hey Alice, What are you up to this weekend? Monica is throwing one of her parties on Saturday. I was hoping you could make it. Will you be my +1? -- Joey " }; // create an image attachment for the file located at path var attachment = new MimePart ("image", "gif") { Content = new MimeContent (File.OpenRead (path)), ContentDisposition = new ContentDisposition (ContentDisposition.Attachment), ContentTransferEncoding = ContentEncoding.Base64, FileName = Path.GetFileName (path) }; // now create the multipart/mixed container to hold the message text and the // image attachment var multipart = new Multipart ("mixed"); multipart.Add (body); multipart.Add (attachment); // now set the multipart/mixed as the message body message.Body = multipart;
A simpler way to construct messages with attachments is to take advantage of the BodyBuilder class.
var message = new MimeMessage (); message.From.Add (new MailboxAddress ("Joey", "[email protected]")); message.To.Add (new MailboxAddress ("Alice", "[email protected]")); message.Subject = "How you doin?"; var builder = new BodyBuilder (); // Set the plain-text version of the message text builder.TextBody = @"Hey Alice, What are you up to this weekend? Monica is throwing one of her parties on Saturday. I was hoping you could make it. Will you be my +1? -- Joey "; // We may also want to attach a calendar event for Monica's party... builder.Attachments.Add (@"C:\Users\Joey\Documents\party.ics"); // Now we just need to set the message body and we're done message.Body = builder.ToMessageBody ();
For more information, see Creating Messages.
@jstedfast brought pretty cool solution, here are a few more examples of simple ways to just send a file as an attachment (pdf document in this case, but can be applied to any file type).
var message = new MimeMessage(); // add from, to, subject and other needed properties to your message var builder = new BodyBuilder(); builder.HtmlBody = htmlContent; builder.TextBody = textContent; // you can either create MimeEntity object(s) // this might get handy in case you want to pass multiple attachments from somewhere else byte[] myFileAsByteArray = LoadMyFileAsByteArray(); var attachments = new List<MimeEntity> { // from file MimeEntity.Load("myFile.pdf"), // file from stream MimeEntity.Load(new MemoryStream(myFileAsByteArray)), // from stream with a content type defined MimeEntity.Load(new ContentType("application", "pdf"), new MemoryStream(myFileAsByteArray)) } // or add file directly - there are a few more overloads to this builder.Attachments.Add("myFile.pdf"); builder.Attachments.Add("myFile.pdf", myFileAsByteArray); builder.Attachments.Add("myFile.pdf", myFileAsByteArray , new ContentType("application", "pdf")); // append previously created attachments foreach (var attachment in attachments) { builder.Attachments.Add(attachment); } message.Body = builder.ToMessageBody();
Hope it helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With