C# iTextSharp使用Memorystream将PDF作为附件发送
我一直在努力解决这个问题,而且已经非常接近了,但还没有完全实现。我正在尝试使用iTextSharp V 4.1.2将PDF作为电子邮件附件发送。我在下面提供的代码同时使用了filestream和memorystream,filestream是为了向我自己证明PDF模板上有数据戳记(它是)。另外,我正在接收电子邮件,但没有附件。有人能看到我遗漏了什么吗C# iTextSharp使用Memorystream将PDF作为附件发送,c#,asp.net-mvc,itextsharp,C#,Asp.net Mvc,Itextsharp,我一直在努力解决这个问题,而且已经非常接近了,但还没有完全实现。我正在尝试使用iTextSharp V 4.1.2将PDF作为电子邮件附件发送。我在下面提供的代码同时使用了filestream和memorystream,filestream是为了向我自己证明PDF模板上有数据戳记(它是)。另外,我正在接收电子邮件,但没有附件。有人能看到我遗漏了什么吗 public class BasePDFController : BaseController { 受保护的ActionResult eMail
public class BasePDFController : BaseController
{
受保护的ActionResult eMailPdf(对象模型)
{
字符串pdf=Path.Combine(Server.MapPath(“~/Infrastructure/PDFTemplates/fw9.pdf”);
字符串outputFilePath=@“C:\Projects\Temp\test\u template\u filled.pdf”
}
编辑:
-是的,邮件提供商有问题。我不知道如何解决它,或者这是否是发送邮件的最佳方式?写这篇文章的人显然放弃了。
编辑
修正了附件
public static class EmailProvider
{
public class Email
{
public String To { get; set; }
public String Subject { get; set; }
public String Body { get; set; }
**public Attachment Attachment { get; set; }**
}
public static void SendEmail(Email email)
{
MailMessage mail = new MailMessage();
mail.To.Add(email.To);
mail.Subject = email.Subject;
mail.Body = email.Body;
mail.IsBodyHtml = true;
mail.Attachments.Add(email.Attachment);
SmtpClient smtp = new SmtpClient();
smtp.Send(mail);
}
}
修复电子邮件后,我将收到PDF!但是,当我尝试从电子邮件打开PDF时,我收到一个错误:
打开此文档时出错。文件已损坏,无法修复。
想法?您应该在
pdfMemoryStamper.Writer.CloseStream=false之后调用pdfMemoryStamper.Close()
像这样:
// *snip*
pdfFileStamper.FormFlattening = true;
pdfMemoryStamper.FormFlattening = true;
pdfMemoryStamper.Writer.CloseStream = false;
pdfMemoryStamper.Close();
memoryStream.Position = 0;
// *snip*
问题可能与EmailProvider.Email
或EmailProvider.SendEmail
有关。如果可以,请发布该代码。我已更新了上述代码,如果有人正在寻找使用iTextSharp发送PDF的工作示例,则上述示例有效。
// *snip*
pdfFileStamper.FormFlattening = true;
pdfMemoryStamper.FormFlattening = true;
pdfMemoryStamper.Writer.CloseStream = false;
pdfMemoryStamper.Close();
memoryStream.Position = 0;
// *snip*