У меня есть документ excel, представленный как байт [], и я хочу отправить его как приложение в электронном письме.Как добавить вложение в электронное письмо с помощью System.Net.Mail?
У меня возникли проблемы с созданием вложения.
я могу создать Вложений, который имеет следующие конструкторы:
(Stream contentStream, ContentType contentType)
(Stream contentStream, string name)
(Stream contentStream, string name, string mediaType)
Моя идея в данный момент является создание MemoryStream из Byte [] и передать его в метод, который создает приложение.
К сожалению, я не вижу способа получить заданное имя файла и тип содержимого из MemoryStream, и я также не вижу, как указать правильный тип контента. Есть варианты для простого текста, Pdf, Rtf и т. Д., Но я не вижу, что сразу же выпрыгиваю на меня, как тот, который я должен использовать для документа Excel.
Ближайший я могу найти MediaTypeNames.Application.Octet, который гласит:
Член октет обозначает, что вложение содержит общие бинарные данные.
Однако, даже если это тот, который нужно использовать, если он не может быть передан как свойство потока, мой метод отправки писем будет иметь возможность отправлять байт [] в виде документа Excel. .
Возможно ли использовать какой-либо другой поток, который я мог бы использовать? Или мне нужно создать собственный тип Stream, который имеет нужные мне детали.
Наверняка кто-то там сделал эту вещь раньше, и, конечно, Microsoft бы продумал до этого уровня ....
Любая помощь будет оценена.
Обновление: Пожалуйста, не голосуйте за ответы, в которых используются конструкторы, принимающие имя файла как строку. Мне действительно нужна помощь, использующая те, которые принимают поток ... Я хочу, чтобы не писать файл на диск, отправлять его по электронной почте и сразу же удалять. Поскольку существует метод, который позволяет мне делать это, я бы хотел использовать его, если это вообще возможно.
Решение Update
Конрада удалось найти то, что я искал! Спасибо, куча человека!
Я просто задокументирую предлагаемое решение на случай, если что-то случится с контентом по прилагаемой ссылке.
Кредит для этого решения переходит к www.systemnetmail.com
static void AttachmentFromStream()
{
//create the mail message
MailMessage mail = new MailMessage();
//set the addresses
mail.From = new MailAddress("[email protected]");
mail.To.Add("[email protected]");
//set the content
mail.Subject = "This is an email";
mail.Body = "this content is in the body";
//Get some binary data
byte[] data = GetData();
//save the data to a memory stream
MemoryStream ms = new MemoryStream(data);
//create the attachment from a stream. Be sure to name the data
//with a file and
//media type that is respective of the data
mail.Attachments.Add(new Attachment(ms, "example.txt", "text/plain"));
SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);
}
В моем случае, это просто означает, что я должен изменить способ, чтобы взять имя файла и FileFormat как строки. Я попробую использовать Octet один ... но в противном случае я просто перейду в официальный тип MIME.
Все, что считается, это довольно очевидное решение ... но я ценю помощь в его решении ...и хорошо, что это решение будет задокументировано для будущих программистов, имеющих такую же проблему.
Еще раз спасибо за помощь!
Спасибо! Это именно то, что я искал. Как вам удалось это найти? Я предполагаю, что мы оба используем один и тот же Google для поиска? – mezoid
Ха-ха! Ну, давайте просто скажем, что в ходе работы я провожу много времени на поиск ответов на проблемы! – Rad
Спасибо Rad, очень удобная ссылка, что – JsonStatham