2011-07-29 16 views
3

我正在面对一个我正在使用的Internet应用程序的问题(使用C#编程)。无需管理员权限,我可以保存哪些存储库?

我必须创建一个报告,然后通过电子邮件发送给某个用户。在创建报告之后,我首先将其保存到临时文件中,然后将其附加到提供文件路径的电子邮件中。

它在我的电脑上工作,因为我拥有管理员权限,但它不适用于在计算机上没有管理权限的同事。

我正在使用的文件路径是:

string filePath = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.InternetCache), 
    fileName 
); 

是否有临时仓库,我可以使用,不需要管理员权限?

谢谢。

+1

您是否使用.Net中内置的MailMessage类?什么是生成您的报告? – Brook

+1

这是一个真正的ASP.NET Web应用程序吗?你为什么要将使用你的网站创建的文件保存到服务器的InternetCache?当然这会失败。 – gangelo

回答

2

如果您在.Net中使用内置的邮件类,除非生成报告需要它,否则根本没有理由将附件写入文件。

这会工作,假设您的报告生成器不需要文件输出,并且只能返回字节。

  SmtpClient smtpClient = new SmtpClient(); //do whatever else you need to do here to configure this 
      byte[] report = GetReport();//whatever your report generator is 
      MailMessage m = new MailMessage(); 
      //add your other mail fields (body, to, cc, subject etc) 
      using (MemoryStream stream = new MemoryStream(report)) 
      { 
       m.Attachments.Add(new Attachment(stream,"reportfile.xls"));//just guessing, use the right filename for your attachment type 
       smtpClient.Send(m); //note that we send INSIDE this using block, because it will not actually read the stream until you send 
            //and you want to make sure not to dispose the stream before it reads it 
      } 
+0

如果不是因为你认为他不能马上通过电子邮件发送电子邮件直到他告诉你为止,那么我会对此表示赞赏。 – gangelo

+0

@gangelo:我意识到这一点,这就是我解释它的原因,但我仍然认为这是值得发布的,因为恕我直言,编写临时文件不是一个好的解决方案,无论如何。即使它是一个模糊的文件报告生成器...现在是时候获得一个新的报告生成器 – Brook

+0

现在不要试图与我;如果解决方案适用于他,我会给你投票;) – gangelo

0

你如何将它附加到电子邮件?从你的问题的声音看来,你所做的只是给你创建的文件的路径,而不是附加它(因为,一旦你附加它,它被嵌入到电子邮件中,因此没有涉及的路径) 。

如果Web应用程序正在创建临时文件,那么您可以使用app_data文件夹(通常是可写的),并使用Path.GetRandomFileName()获取唯一的文件名。

所以,像

var myTemporaryFileName = Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data", 
             Path.GetRandomFileName()); 

然后写你的文件,以这个临时文件名,然后将其附加到电子邮件

MailMessage message = new MailMessage("[email protected]", "", ""    
         "subject", 
         "mail body"); 

Attachment data = new Attachment(file, MediaTypeNames.Application.Octet); 
ContentDisposition disposition = data.ContentDisposition; 
disposition.FileName = "thefilenameyouwanttouseintheemail.ext"; 
message.Attachments.Add(data); 

现在,你可以把它。

不要忘了把它们清理干净!