2009-10-07 116 views
2

我已經使用ABDpdf來渲染PDF並將其傳輸到瀏覽器,但是我想知道是否可以將渲染的PDF附加到電子郵件中。有沒有人曾經這樣做過?ABCpdf將Doc附加到電子郵件

我希望有一種方法,不需要我將PDF保存到臨時目錄,然後附加文件,然後將其刪除。

回答

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)

9

Meklarian是正確的,但有一點要指出的是,您保存的PDF到您的流之後,你會想回來重置流位置爲0。否則附件是發送將是所有foo禁止。

(我花了大約兩個小時來弄明白。哎喲,希望能幫助別人節省一些時間。)

//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("[email protected]"); 
    msg.From = new MailAddress("[email protected]"); 
    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

+1 ......我忘了復位在其它場景流位置,以及。 – meklarian 2010-05-21 19:24:05

+0

+1 ..我只花了一個小時試圖弄清爲什麼我的文件總是0字節。 – philwilks 2011-01-03 17:05:05

+0

感謝您發表您的答案。 – 2015-11-21 16:08:06