Как заголовок, MailKit поддерживается для отправки файла?
Если да, как я могу это сделать?
Могу ли я отправлять файлы по электронной почте с помощью MailKit?
Ответ 1
Да. Это объясняется в документации, а также в FAQ.
Из FAQ:
Как создать сообщение с вложениями?
Чтобы создать сообщение с вложениями, первое, что вам нужно сделать, это создать multipart/mixed
Контейнер, к которому вы хотите добавить тело сообщения. После того, как вы добавили тело, вы можете
затем добавьте в него части MIME, которые содержат содержимое файлов, которые вы хотите прикрепить, обязательно установив
значение заголовка Content-Disposition
для вложения. Возможно, вы также захотите установить filename
параметр в заголовке Content-Disposition
, а также параметр name
в Content-Type
заголовок. Самый удобный способ сделать это - просто использовать
свойство MimePart.FileName, которое
установит для вас оба параметра, а также установит значение заголовка Content-Disposition
на attachment
если он еще не был установлен на что-то другое.
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 and 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;
Более простой способ создания сообщений с вложениями - воспользоваться BodyBuilder класс.
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 and I was hoping you could make it.
Will you be my +1?
-- Joey
";
// We may also want to attach a calendar event for Monica 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 ();
Для получения дополнительной информации см. Создание сообщений.
Ответ 2
@jstedfast принес довольно классное решение, вот еще несколько примеров простых способов просто отправить файл в виде вложения (в данном случае документ pdf, но его можно применить к любому типу файлов).
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();
Надеюсь, это поможет.