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

C# 在asp.net应用程序中将自动生成的pdf附加到电子邮件,c#,asp.net,C#,Asp.net,我有一个非常具体的要求。在我的web应用程序中,我必须根据数据库值生成pdf发票和电子邮件正文。我可以很容易地发送这个使用SMTP的作品完美 但,问题是我们不能依靠制度来永远完善,这是一张发票。因此,我们需要打开默认的邮件客户端,而不是使用SMTP。现在,我有以下代码 //Code to create the script for email string emailJS = ""; emailJS += "window.open('mailto:testmail@gmail.com?body=

我有一个非常具体的要求。在我的web应用程序中,我必须根据数据库值生成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);
已更新路径以确保其正确。现在,它只是抛出一个错误,说
命令行参数无效

编辑:

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

编辑:我又尝试了一个选项

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
只支持附件的直接文件路径。也就是说,路径必须是本地的才能使用机器,或者是网络中的内部网路径

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


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

您正在使用的是intranet应用程序吗?如果是这样,可以通过一些限制来完成,否则就不能。是的,内部网应用程序。因此,在这种情况下,当我在我的电脑上调试时,
\\localhost\web\temp\123.pdf
C:\web\temp.pdf
。需要什么?没有。首先,您需要创建一个共享文件夹,在此过程中,windows将向您显示该文件夹的网络路径。这就是你需要的。再一次,确保您的客户有权访问此文件夹中的文件好的,只是为了测试,下面是我所做的。一条固定的直接路径。在本地计算机上调试时,即使这样也失败了。检查有问题的编辑,看看你是否能解决这个问题。也许我错过了其他的东西。我的意思是,在这种情况下,服务器和客户端是一样的,所以outlook可以直接访问。我也确保正确地转义文件路径。还是一样的问题/