如何将 .docx 和 .doc 文件附加到内存流中的电子邮件?

How to attach .docx and .doc files to the email from memory stream?

我正在 file attachmentmemory 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...

您应该使用 MediaTypeNames.Application.Octet 作为 mime 类型。

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

感谢 Benoit Gidon 的回答。我再次被证明,你的假设是你最大的敌人。

显然就这么简单,不需要任何其他特殊方法,只要将 file.InputStream 直接放入附件即可,这与其他 S.O 不同。帖子让你相信:

如果有人真的在为它苦苦挣扎,这里是代码:

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

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

我用 .docx 文档测试了它,其中包含 5000 words 的内容,以及 tablespictures,它按照它的方式重建在我的 gmail 客户端中。

刚刚测试过,它与 .png 的工作方式相同,因此不需要 PngBitmapDecoder