【发布时间】: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 应用程序。