使用内存流生成一个PDF文件system.net.mail.attachment



我有一个函数,它接受一个字符串并根据该字符串生成一个电子邮件附件。它可以很好地处理html页面、文本文档等,但我无法让它生成PDF文件。

代码:

Public Sub SendMail _
( _
ByVal strFrom As String _
, ByVal strTo As String _
 , ByVal strSubject As String, ByVal strBody As String _
 , Optional ByVal attachment As String = "" _
 , Optional ByVal filename As String = "Attachment.HTML" _
)
    Dim sendMail As New SmtpClient
    Dim mail As New MailMessage(strFrom, strTo)
    Dim userToken As New Object

        mail.Subject = strSubject
        mail.Body = strBody
        mail.IsBodyHtml = True

        Using MemoryStream = New MemoryStream
            If attachment.Length <> 0 Then
                        Dim data As Byte() = Encoding.ASCII.GetBytes(attachment)
                        MemoryStream.Write(data, 0, data.Length)
                        MemoryStream.Seek(0, SeekOrigin.Begin)
                        MemoryStream.Position = 0
                        Dim content As New ContentType()
                        content.MediaType = MediaTypeNames.Application.Octet
                        content.Name = filename
                        Dim newAttach As New Attachment(MemoryStream, content)
                        mail.Attachments.Add(newAttach)
            End If

            sendMail.DeliveryMethod = SmtpDeliveryMethod.Network
            sendMail.Host = "SERVER"
            sendMail.UseDefaultCredentials = False
            sendMail.Credentials = New System.Net.NetworkCredential("UN", "PW")
            sendMail.Send(mail)

        End Using

如果我将文件附件保存为Whatever.PDF,我会得到它没有正确编码的错误。不知道我需要做些什么来处理PDF,我试着搜索谷歌,但没有找到任何帮助我的东西。

:

我正在使用dataddynamics活动报告PDF导出程序来生成PDF

dim pdf as new datadynamics.activereports.export.pdf.pdfexport
sendmail("from@", "to@", "test", "test", pdf.tostring, "pdf.pdf")

我认为问题是我正在将PDF转换为字符串,然后试图将其转换回PDF并将其附加到电子邮件,但我不是100%确定。

谢谢。

我不熟悉这种报告技术,但是根据文档,您应该使用这样的内容:

DataDynamics.ActiveReports.Export.Pdf.PdfExport p = new DataDynamics.ActiveReports.Export.Pdf.PdfExport();
string tmp = Path.GetTempFileName();
p.Export(rpt.Document, tmp, "1-10000");
byte[] pdf = File.ReadAllBytes(tmp);
File.Delete(tmp);

pdf数组构建MemoryStream或从tmp文件添加附件

最新更新