我已经使用ABDpdf呈现pdf并将其流式传输到浏览器,但我想知道是否可以将呈现的pdf附加到电子邮件中。有没有人这样做过?
我希望有一种方法不需要我将pdf保存到临时目录然后附加文件,然后将其删除。
答案 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类在路上发送消息。