ABCpdf将Doc附加到电子邮件中

时间:2009-10-07 00:00:36

标签: abcpdf

我已经使用ABDpdf呈现pdf并将其流式传输到浏览器,但我想知道是否可以将呈现的pdf附加到电子邮件中。有没有人这样做过?

我希望有一种方法不需要我将pdf保存到临时目录然后附加文件,然后将其删除。

2 个答案:

答案 0 :(得分:9)

Meklarian是对的,但有一点要指出的是,在你将pdf保存到流中之后,你需要将你的流位置重置为0.否则发送的附件将全部为foo -barred。

(我花了大约两个小时来弄明白。哎哟。希望能帮助别人节省一些时间。)

    //Create the pdf doc
    Doc theDoc = new Doc();
    theDoc.FontSize = 12;
    theDoc.AddText("Hello, World!");

    //Save it to the Stream
    Stream pdf = new MemoryStream();
    theDoc.Save(pdf);
    theDoc.Clear();

    //Important to reset back to the begining of the stream!!!
    pdf.Position = 0; 

    //Send the message
    MailMessage msg = new MailMessage();
    msg.To.Add("you@you.com");
    msg.From = new MailAddress("me@me.com");
    msg.Subject = "Hello";
    msg.Body = "World";
    msg.Attachments.Add(new Attachment(pdf, "MyPDF.pdf", "application/pdf"));
    SmtpClient smtp = new SmtpClient("smtp.yourserver.com");
    smtp.Send(msg);

答案 1 :(得分:3)

根据ABCpdf PDF支持网站上的文档,Doc()对象过载,支持保存到流。使用此功能,您可以将结果保存为生成的PDF,而无需使用MemoryStream类显式写入磁盘。

ABCpdf PDF Component for .NET : Doc.Save()
MemoryStream (System.IO) @ MSDN

创建MemoryStream后,您可以将该流传递给任何支持从流创建附件的电子邮件提供商。 System.Net.Mail中的MailMessage支持此功能。

MailMessage Class (System.Net.Mail) @ MSDN
MailMessage.Attachments Property @ MSDN
Attachments Class @ MSDN
Attachments Constructor @ MSDN

最后,如果您以前从未使用过MailMessage类,请使用SmtpClient类在路上发送消息。

SmtpClient Class (System.Net.Mail)