iTextSharp - 在电子邮件附件中发送内存中的 pdf

2023-11-21

我在这里问了几个问题,但仍然遇到问题。如果您能告诉我我的代码中做错了什么,我将不胜感激。我从 ASP.Net 页面运行上面的代码并得到“无法访问关闭的流”。

var doc = new Document();

MemoryStream memoryStream = new MemoryStream();

PdfWriter.GetInstance(doc, memoryStream);
doc.Open();
doc.Add(new Paragraph("First Paragraph"));
doc.Add(new Paragraph("Second Paragraph"));

doc.Close(); //if I remove this line the email attachment is sent but with 0 bytes 

MailMessage mm = new MailMessage("[email protected]", "[email protected]")
{
    Subject = "subject",
    IsBodyHtml = true,
    Body = "body"
};

mm.Attachments.Add(new Attachment(memoryStream, "test.pdf"));
SmtpClient smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    Credentials = new NetworkCredential("[email protected]", "my_password")
};

smtp.Send(mm); //the "Cannot Access a Closed Stream" error is thrown here

谢谢!!!

EDIT:

为了帮助某人寻找这个问题的答案,发送附在电子邮件中的 pdf 文件而无需实际创建文件的代码如下(感谢 Ichiban 和 Brianng):

var doc = new Document();
MemoryStream memoryStream = new MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream);

doc.Open();
doc.Add(new Paragraph("First Paragraph"));
doc.Add(new Paragraph("Second Paragraph"));

writer.CloseStream = false;
doc.Close();
memoryStream.Position = 0;

MailMessage mm = new MailMessage("[email protected]", "[email protected]")
{
    Subject = "subject",
    IsBodyHtml = true,
    Body = "body"
};

mm.Attachments.Add(new Attachment(memoryStream, "filename.pdf"));
SmtpClient smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    Credentials = new NetworkCredential("[email protected]", "password")

};

smtp.Send(mm);

你有没有尝试过:

PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream);

// Build pdf code...

writer.CloseStream = false;
doc.Close();

// Build email

memoryStream.Position = 0;
mm.Attachments.Add(new Attachment(memoryStream, "test.pdf"));

如果我没记错的话,这解决了之前项目中的类似问题。

See http://forums.asp.net/t/1093198.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iTextSharp - 在电子邮件附件中发送内存中的 pdf 的相关文章

随机推荐

  • 在 HTML 中嵌入 Ruby 代码?

    在 PHP 中 可以这样做
  • 使用 Visual Studio 2012 编译 C 应用程序

    我计划使用 Microsoft Visual Studio 2012 用 C 语言编写应用程序 问题是我找不到在编辑器中正确编译它的方法 我找到了这个解决方案http msdn microsoft com en us library bb3
  • 谷歌地图错误:哎呀!出了些问题。此页面未正确加载 Google 地图

    第一次在stackoverflow上提问 所以如果我违反了一些规则 请耐心等待 尽我最大努力自己解决寻找解决方案 但没有运气 我使用了一个工具来帮助我自定义具有多个标记位置和样式的谷歌地图 代码如下 我在本地和我自己的域上对其进行了测试 并
  • 显式引用限定转换运算符模板的实际应用

    给定以下转换运算符 struct A template
  • 使用 apscheduler 构建 Pyinstaller 3.3.1 和 3.4.0-dev

    问候 我正在尝试使用 PyInstaller 进行构建 配置 Python 3 6 5 pip 10 0 1 OS Ubuntu 18 04 Using virtualenv 也尝试过python m venv 我的应用程序使用apsche
  • 通过 Windows Live ID 登录桌面应用程序

    我想为我的桌面应用程序创建一个登录表单 用户可以使用 Windows Live ID 来实现此目的 我创建一个应用程序管理 dev live com并使用桌面实施部分 I use a WebBrowser控制并导航到给定地址 但我不知道如何
  • 如何获取字符串数组中的 Logger 值

    我用的是log4j Logger我已使用以下命令将日志值写入文件中FileAppender 现在我想在文本区域中显示日志值 如何将记录器值分配给字符串数组 您可以添加一个额外的Appender给你的Logger Use a 作家追加者写信给
  • 无法信任 iPhone 上的自签名证书

    我目前正在尝试使用自签名证书连接到服务器 我正在使用 NSURLConnection 连接到服务器 如何确保我只信任正确的服务器并取消所有其他连接 我正在使用以下代码 void connection NSURLConnection conn
  • 选择并分组

    我的查询是这样的 Select a abc a cde a efg a agh c dummy p test max b this sum b sugar sum b bucket sum b something 接下来是一些外连接和内连接
  • TPL 数据流:有限容量并等待完成

    为了简单起见 下面我将现实生活中的场景复制为 LINQPad 脚本 var total 1 1000 1000 var cts new CancellationTokenSource var threads Environment Proc
  • weblogic增加内存的方法

    我需要增加 weblogic 的内存 我是这方面的新手 我不知道如何 我需要设置 Xss 4096k 我怎样才能做到呢 Xss是Thread Stack Size 不是内存大小 您可以通过更改参数 Xmx 来更改内存大小 最重要的参数是 X
  • 在 ASP.NET Core 中使用源自 Microsoft.AspNet.Web.Optimization (.net-framework) 的“脚本”和“样式”

    我有一个简单的 ASP NET MVC 项目 需要将其移植到 ASP NET Core 在视图 cshtml 中我发现了类似的元素 Styles Render or Scripts Render Styles Render Content
  • 如何在 Google 电子表格上列出 Google 云端硬盘文件夹中的所有文件

    我有一个包含超过 2000 个文件的文件夹 我需要在谷歌电子表格上列出所有这些文件 我在网上找到了一些脚本 但它们并没有完全工作 当我点击 RUN 时 我只得到 250 个文件的列表 在 Google 开发者页面上阅读时 我发现了一些有关启
  • 具有两个标题行的表排序器

    我正在使用表排序器 jquery 插件我的表格标题中有两行 有什么方法可以在我的表上启用排序吗 它应该能够按第二个标题行排序 第一个标题行只是按日期对相关数据进行分组 如果使用此插件不可能做到这一点 也许有人有解决方法的建议 这是我的表格标
  • SQL Server 上的 varbinary 到 string

    如何将列值转换为varbinary max to varchar以人类可读的形式 以下表达式对我有用 SELECT CONVERT VARCHAR 1000 varbinary value 2 Here有关样式选择的更多详细信息 第三个参数
  • 检查是否从 iOS 设备访问 PHP 页面

    我有一个简单的 PHP 网页 并且希望返回不同的内容 具体取决于它是从 iPhone iPad 还是从网络浏览器访问 我怎样才能做到这一点 使用来自的用户代理 SERVER HTTP USER AGENT 对于简单的检测 您可以使用this
  • 如何检查网站上的值是否已更改

    基本上 如果网站上的值发生变化 我会尝试运行一些代码 Python 3 2 否则稍等一下 稍后再检查 首先 我认为我可以将值保存在变量中 并将其与下次运行脚本时获取的新值进行比较 但这很快就遇到了问题 因为当脚本再次运行并初始化该变量时 该
  • jquery ctrl+enter 作为在文本区域中输入

    I am trying to reproduce standard instant messenger behavior on TEXT area control enter works as send button ctrl enter
  • 如何在不使用更新数据库的情况下生成启用了迁移的 EF6 数据库?

    在 EF5 中 我依赖于这样一个事实 我可以使用以下命令从模型重新创建数据库Database CreateIfNotExists 我会根据需要生成迁移 但永远不会将它们签入源代码管理 因为它们往往是开发周期的工件 然后每个开发人员都会根据需
  • iTextSharp - 在电子邮件附件中发送内存中的 pdf

    我在这里问了几个问题 但仍然遇到问题 如果您能告诉我我的代码中做错了什么 我将不胜感激 我从 ASP Net 页面运行上面的代码并得到 无法访问关闭的流 var doc new Document MemoryStream memoryStr