c# - 将自动生成的 pdf 附加到 asp.net 应用程序中的电子邮件

标签 c# asp.net

我有一个非常具体的要求。在我的网络应用程序中,我必须从数据库值和电子邮件正文生成 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 行有效,但它什么也没做。没有进程启动,也没有错误。

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

最佳答案

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

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

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

关于c# - 将自动生成的 pdf 附加到 asp.net 应用程序中的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36714879/

相关文章:

C# 转换性能影响

c# - 如何在繁忙的循环中显示进度?

asp.net - 在 asp.net 中缓存 sql server 数据,直到行被修改

c# - 导航离开脚本不起作用

c# - 枚举属性、Web API、JSON 反序列化和拼写错误

c# - 异步和并行下载文件

c# - 域对象更改 - 需要刷新缓存列表

c# - 在 .Net 中 Hook

c# - 如何在c#中拆分带日期的字符串

C# 订单列表