Как прикрепить файлы .docx и .doc к письму из потока памяти? - PullRequest
0 голосов
/ 08 февраля 2019

Я делаю от file attachment до memory stream, потому что temporary storage не вариант.

Здесь я сделал Jpeg вложение изображения.Я посмотрел на другие типы файлов, с которыми вы могли бы сделать то же самое, переключив MediaTypeNames, и, к сожалению, .doc и .docx среди них нет.

Мне было интересно, знает ли кто-нибудь из вас о каких-либоpackage and how to use it для этого конкретного случая?

//...set up MailMessage, add a bunch of non-file content to it

MemoryStream jpgStream = new MemoryStream();
string filename = uploadedFile.FileName;

System.Drawing.Image theImage = System.Drawing.Image.FromStream(uploadedFile.InputStream);

theImage.Save(jpgStream, System.Drawing.Imaging.ImageFormat.Jpeg); 

jpgStream.Seek(0L, SeekOrigin.Begin);
emailMessage.Attachments.Add(new Attachment(jpgStream, filename, System.Net.Mime.MediaTypeNames.Image.Jpeg));

//something extra and send email...

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Спасибо Benoit Gidon за ответ.Мне еще раз доказали, что ваши предположения являются вашим злейшим врагом.

Очевидно, это так просто, и вам не нужны никакие другие специальные методы, если вы помещаете файл. InputStream непосредственно во вложение, в отличие отдругие сообщения SO заставляют вас поверить: /8208505/prikrepite-neskolko-formatov-izobrazhenii-a-ne-tolko-jpg-k-elektronnoi-pochte

/5681439/prikrepite-fail-iz-memorystream-k-mailmessage-v-c

На случай, если кто-то действительно борется с этим, вот код:

foreach (HttpPostedFileBase file in fullViewModel.filesCollection)
            {
                string filename = file.FileName;

                 msg.Attachments.Add(new Attachment(file.InputStream, filename, MediaTypeNames.Application.Octet));
            }

Я проверялэто с документом .docx, в котором содержалось 5000 words контента, а также tables и pictures, и его реконструируют так, как это было в моем клиенте gmail.

Только что проверил, чтотакже работает с .png, поэтому нет необходимости в PngBitmapDecoder.

0 голосов
/ 08 февраля 2019

Вы должны использовать MediaTypeNames.Application.Octet как mime-тип.

От: https://docs.microsoft.com/fr-fr/dotnet/api/system.net.mime.mediatypenames.application.octet?view=netframework-4.7.2

...