2011-07-29 4 views
3

私は現在取り組んでいるインターネットアプリケーションの問題に直面しています(C#でプログラミングしています)。管理者権限を持たないと、どのリポジトリに保存できますか?

私はレポートを作成して、特定のユーザーに電子メールを介してそれを送信する必要があります。レポートを作成したら、最初に一時ファイルに保存してから、ファイルパスを示す電子メールに添付します。

私は管理者権限があるので、自分のコンピュータで動作していますが、自分のコンピュータに管理者権限を持っていない同僚のためには動作しません。

私が使用しているファイルのパスは次のとおりです。

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

私は管理者権限を必要としないことを使用することができます任意の一時的なリポジトリがありますか?

ありがとうございました。

+1

.NETで組み込みの 'MailMessage'クラスを使用していますか?レポートを生成するのは何ですか? – Brook

+1

これは本当にASP.NET Webアプリケーションですか? 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:なぜそれを説明したのか分かりませんが、IMHOの一時ファイルを書くのは何に関係なく良い解決策ではないので、投稿する価値はあると思います。たとえそれがあいまいなファイルのみのレポートジェネレータであっても...新しいレポートジェネレータを取得するときです – Brook

+0

今は私とテストしないでください。解決策が彼のために働くなら、私はあなたに投票しようとしていた;) – gangelo

3

あなたのASP.NETタグを考慮すると、あなたはIsolated Storageを使用して見なければなりません。

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); 

に添付し、この一時的なファイル名にファイルを書き込みます。

は、しかし後にそれらをクリーンアップすることを忘れないでください!

関連する問題