【问题标题】:Attaching auto generated pdf to email in asp.net app在 asp.net 应用程序中将自动生成的 pdf 附加到电子邮件
【发布时间】:2016-04-20 16:47:27
【问题描述】:

我有一个非常具体的要求。在我的网络应用程序中,我必须根据数据库值和电子邮件正文生成 pdf 发票。我可以使用完美的 SMTP 轻松发送它。

但是,问题是我们不能依靠系统永远完美,这是一张发票。所以,我们需要打开默认的邮件客户端,而不是使用 SMTP。现在,我有以下代码

//Code to create the script for email
string emailJS = "";
emailJS += "window.open('mailto:testmail@gmail.com?body=Test Mail" + "&attachment=" + emailAttachment + "');";
//Register the script for post back
ClientScript.RegisterStartupScript(this.GetType(), "mailTo", emailJS, true);

这会完美打开电子邮件,但没有附件可用。路径应该是/Web/Temp/123.pdf

如果我使用与正常 url 相同的路径,如下所示,它会在新窗口中正确打开文件。

ClientScript.RegisterStartupScript(this.GetType(), "newWindow", "window.open('/Web/Temp/123.pdf');", true);

所以,显然文件存在,但它存在于服务器上。另一方面,Outlook 在客户端计算机上打开。所以,我不能使用像C:\Web\Temp\123.pdf 这样的完整路径。如果我尝试这样做,它将尝试在客户端计算机上查找该文件,该文件夹本身可能不存在。

我想弄清楚我能在这里做什么。如果有其他方法我应该尝试。

附:不,我不能直接发送电子邮件。这会给我带来更多的麻烦。

编辑: 我还发现了一个奇怪的问题。如果我在附件中的文件路径中添加双引号,则会自动添加一个 \。 @"&attachment=""" + Server.MapPath(emailAttachment) + @"""');" 给我的输出为&attachment=\"C:\Web\Temp\123.pdf\"

我试图逃避那个双引号,并以某种方式添加了那个斜线。我知道这是一个完全不同的问题,但我认为我应该在这里提及,而不是创建一个新问题。

编辑: 我在本地主机上尝试了一个固定路径。所以,我基本上是在存储文件的同一台机器上测试应用程序。仍然,根本没有任何依恋。

string emailJS = "";

emailJS += @"window.open('mailto:jitendragarg@gmail.com?body=Test Mail" + emailAttachment + @"&attachment=";
emailJS += @"""D:\Dev\CSMS\CSMSWeb\Temp\635966781817446275.Pdf""');";
//emailJS += Server.MapPath(emailAttachment) + @"');";
//Register the script for post back
ClientScript.RegisterStartupScript(this.GetType(), "mailTo", emailJS, true);

更新了路径以确保它是正确的。现在,它只是抛出错误说command line argument not valid

编辑:

还有其他方法可以尝试吗?我在服务器端有文件路径。也许我可以将文件自动下载到客户端机器上的某个默认文件夹并从那里打开?这可能吗?

编辑:我尝试了另一种选择。

emailJS += @"mailto:testmail@gmail.com?body=Test Mail" + @"&attachment=";
emailJS += @"\\localhost\CSMSWeb\Temp\635966781817446275.Pdf";
//emailJS += Server.MapPath(emailAttachment) + @"');";
Process.Start(emailJS);

Process.Start 行有效,但它什么也没做。没有进程启动,也没有错误。

编辑: 耶。我终于让用户批准使用单独的表单来显示主题和正文,而不是打开默认的邮件客户端。虽然,我仍然更愿意按原样解决这个问题。

【问题讨论】:

  • 您正在开发这个互联网应用程序吗?如果是这样,它可以做一些限制,否则它不能。
  • 是的,Intranet 应用程序。

标签: c# asp.net


【解决方案1】:

所以,这里的问题是mailto 只支持附件的直接文件路径。也就是说,路径必须是本地的才能使用机器,或者是网络内的内网路径。

换句话说,像http://yourapp/Web/Temp/123.pdf 这样的路径不起作用,/Web/Temp/123.pdf 本质上相同也不起作用。这些不是路径,而是指向必须下载并存储在本地才能用作附件的文件的链接 - mailto 协议不支持。

但是,由于您的应用程序是 Intranet,您可以做的是确保目标用户可以访问您服务器上的某些网络共享文件夹,然后为他们提供文件的网络路径,即\\theserver\files\123.pdf

【讨论】:

  • 所以,在这种情况下,当我在我的电脑上调试时,\\localhost\web\temp\123.pdfC:\web\temp.pdf。需要什么?
  • 无。首先,您需要创建一个共享文件夹,在此过程中,窗口将向您显示它的网络路径。那就是你需要的那个。再次确保您的客户有权访问此文件夹中的文件
  • 好吧,只是为了测试,这就是我所做的。直接固定路径。即使在本地机器上调试时也失败了。检查有问题的编辑,看看你是否能找出问题所在。也许我在这里错过了其他东西。我的意思是,在这种情况下,服务器与客户端相同,因此 Outlook 可以直接访问。我也确保正确转义文件路径。还是一样的问题。 ://
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 2011-05-21
  • 2014-11-11
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多