发送带有 pre-existing PDF 的电子邮件 - 收件人无法打开 PDF

Sending email with pre-existing PDF - the PDF cannot be opened by recipients

我需要有关通过 ASP.NET 发送 PDF 的帮助。我有一个网络屏幕,用户可以在其中输入一些信息,如果需要,还可以浏览他们的文件夹并获取 PDF 以通过电子邮件发送。 PDF 不是动态创建的,它已经在用户的机器上(通常在桌面上或我的文档中)。

我可以使用 FileUpload 命令获取 PDF,它可以很好地附加和发送。然而,当有人试图打开 PDF 时,他们会收到无法打开的消息,因为它不是受支持的文件类型或已损坏,并提示它未正确解码。

我知道这不是不受支持的文件类型或损坏的 PDF 问题——这是解码问题——但我似乎找不到任何地方谈论抓取现有 PDF 并通过电子邮件发送它。我确定为 PDF 或编码设置 header 信息存在问题——但我找不到任何明确的示例来说明如何获取现有 PDF 并发送它并获取所有 headers 或内容类型或字节内容正确(我目前没有解决这些问题——我知道我的问题出在某个地方,但我不知道从哪里开始,所以我没有处理任何问题的代码这些东西)。

我有的是:

Dim email As New MailMessage

......set up body and subject and sender/receiver info

If FileUpload1.HasFile Then

Dim FileName As String = Path.GetFileName(FileUpload1.PostedFile.FileName)
Dim memStream As New MemoryStream(UTF32Encoding.Default.GetBytes(FileName))
memStream.Position = 0
Dim attachFile As New Attachment(memStream, FileName)
email.Attachments.Add(attachFile)
End If

我什至不确定这是正确的开始方法,但我花了很长时间才到达这里,在此之前它从未在 FileUpload1 中找到附件。现在我至少可以拿到它并发送它,但它不能被任何人打开。如果从头到尾有更好的方法,我会全力以赴。

这是一个 intranet/internal 网页,使用我们的内部网络电子邮件 (outlook) 仅与内部收件人进行收发。

如有任何想法,我们将不胜感激

是的,似乎有太多厨师为我的原始代码做出了贡献,使它变得比它本来应该的更混乱。丢弃 if/end if 之间的所有内容并替换为

Dim strFileName as String = System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName)
Dim attachment as New Attachment(FileUpload1.PostedFile.InputStream, strFileName)
email.Attachments.Add(attachment)

处理一切——而且比所有网站看起来要简单得多 谢谢