2009-05-28 8 views
5

ASP.NETとC#を使用してSQLレポートサーバー2008から電子メールの添付ファイルとしてレポートを送信しようとしています。 まで私のコードでGet report as PDFまで 今、私は事前にC#とASP.NETを使用して電子メールの添付ファイルでSQLレポートを送信

byte[] bytes = rview.ServerReport.Render(format, deviceInfo, out mimeType, out encoding, out extension, out streamids, out warnings); 
Response.OutputStream.Write(bytes, 0, bytes.Length); 
Attachment reportAttachment = new Attachment(Response.OutputStream.Write(bytes,0,bytes.Length),"ado"); //Here I go wrong 

ありがとうのようなコードの行を結合したい

答えて

3

たぶん私はこの間違った(私はSSRSについて少し知っている)が、私はあなたがすべきだと思うの取得

  1. は、電子メールでファイルを送信し

    MailMessage mail = new MailMessage(); 
    mail.From  = "Me"; 
    mail.To   = "You"; 
    mail.Subject  = "Subject"; 
    mail.Body  = "Body"; 
    mail.BodyFormat = MailFormat.Html; 
    mail.Attachments.Add(new MailAttachment("c:\temp\temp.pdf")); 
    
    try 
    { 
        SmtpMail.Send(mail); 
    } 
    catch(Exception ex) 
    { 
        Response.Write("Ouch! " + ex.Message); 
    } 
    
+0

おかげで、一つだけ少しの発言は、もみの引数は、ファイルの文字列のアドレスがあり、第二は、[]バイトです。 これまでのところ、私はこの仕事をするためのWebサービスを作るアイデアを持っています。 サンプルWebページを作るのと比べて難しいでしょうか。 – adopilot

+0

あなたは正しいです!答えを訂正しました。 –

13

代わりの最初のファイルシステムにPDFを保存するファイルシステム

System.IO.File.WriteAllBytes("c:\temp\temp.pdf", bytes); 
  • にファイルを保存し、あなたはバイトを使用するように試みることができます[]がレポートサーバーから返され、これを添付します:

    MemoryStream ms = new MemoryStream(bytes); 
    mail.Attachments.Add(new Attachment(ms, "temp.pdf")); 
    

    これは便利です

    WebClient client = new WebClient(); 
    byte[] bytes = client.DownloadData("http://localhost/ReportServer/Pages/ReportViewer.aspx? *** report name *** &rs%3aFormat=PDF"); 
    MemoryStream ms = new MemoryStream(bytes); 
    mail.Attachments.Add(new Attachment(ms, "temp.pdf")); 
    

    ホープ

  • +0

    私の意見では、ファイルをファイルシステムに保存せずにアタッチする方がはるかに洗練された方法です。ソリューションに感謝します。 – Mozy

    +1

    これは、MemoryStreamからAttachmentを作成できるように、System.Net.Mailを使用しなければならなかったが、うまく動作します。 – openshac

    1

    あなたはまた、SSRSサブスクリプションを使用することができます。私のレポートで、私は次のようでした。それは電子メール機能を内蔵しています。

    前提条件:

    • あなたのレポートがセットアップされています。
    • 電子メールを送信するようにSSRSレポートサーバーを構成しました。
    • SSRSサーバーは2010年以降です。私は2008年かどうかは、購読をサポートする前にはわかりません。

      Microsoft's documentation from the UI standpoint

    コード:

    System.IOは魔法のように動作
    var service = new ReportingService2010(); 
    service.Url = reportServiceURL; 
    service.Credentials = new NetworkCredential(userName, password, domain); 
    
    var reportPath = "your/report/location"; 
    
    string report = $"{reportPath}YourReportName.rdl"; 
    string fileName = $"Your Custom Report"; 
    
    //If your report requires input parameters, specify them in an array. 
    ParameterValue[] reportParameters = new ParameterValue[1]; 
    
    reportParameters[0] = new ParameterValue(); 
    reportParameters[0].Name = "ID"; 
    reportParameters[0].Value = ID.ToString(); 
    
    ParameterValue[] extensionParams = new ParameterValue[11];//Adjust this if you omit parameters. 
    
    extensionParams[0] = new ParameterValue(); 
    extensionParams[0].Name = "TO"; 
    extensionParams[0].Value = "[email protected];[email protected];[email protected];" 
    
    //CC, can be omitted. 
    extensionParams[1] = new ParameterValue(); 
    extensionParams[1].Name = "CC"; 
    extensionParams[1].Value = "[email protected];[email protected];" 
    
    //BCC, can be omitted. 
    extensionParams[2] = new ParameterValue(); 
    extensionParams[2].Name = "BCC"; 
    extensionParams[2].Value = "[email protected];[email protected];" 
    
    //Reply to, where replies should go. 
    extensionParams[3] = new ParameterValue(); 
    extensionParams[3].Name = "ReplyTo"; 
    extensionParams[3].Value = "[email protected]" 
    
    //Include report as an attachment, this should be TRUE. 
    extensionParams[4] = new ParameterValue(); 
    extensionParams[4].Name = "IncludeReport"; 
    extensionParams[4].Value = "True" 
    
    //What you want the attached file to render as. You have some options. 
    extensionParams[5] = new ParameterValue(); 
    extensionParams[5].Name = "RenderFormat"; 
    extensionParams[5].Value = "PDF"; //pdf 
    //extensionParams[5].Value = "WORD"; //doc, word 2003 - 2007 
    //extensionParams[5].Value = "WORDOPENXML"; //docx, word 2010 - 2013+ 
    //extensionParams[5].Value = "EXCEL"; //xls, excel 2003 - 2007 
    //extensionParams[5].Value = "EXCELOPENXML"; //xlsx, excel 2010 - 2013+ 
    //extensionParams[5].Value = "IMAGE"; //TIFF file 
    //extensionParams[5].Value = "CSV"; //CSV file 
    //extensionParams[5].Value = "XML"; //XML file 
    
    //Optional, set the priority of the message. 
    extensionParams[6] = new ParameterValue(); 
    extensionParams[6].Name = "Priority"; 
    extensionParams[6].Value = "High"; 
    //extensionParams[6].Value = "Normal"; 
    //extensionParams[6].Value = "Low"; 
    
    //Subject Line 
    extensionParams[7] = new ParameterValue(); 
    extensionParams[7].Name = "Subject"; 
    extensionParams[7].Value = "Your lovely report"; 
    
    //Comment, I believe this is the "body" of the email. 
    extensionParams[8] = new ParameterValue(); 
    extensionParams[8].Name = "Comment"; 
    extensionParams[8].Value = "Hi there, <br/><br/>I have your report. Thanks for automating me out of the job, you programmer you!"; 
    
    //Include a hyperlink to run the report in the email body? Can be omitted. 
    extensionParams[9] = new ParameterValue(); 
    extensionParams[9].Name = "IncludeLink"; 
    extensionParams[9].Value = "False"; 
    
    //If you want to send it "on behalf of" someone, use this. Can be omitted. 
    extensionParams[10] = new ParameterValue(); 
    extensionParams[10].Name = "SendEmailToUserAlias"; 
    extensionParams[10].Value = "[email protected]"; 
    
    ExtensionSettings extSettings = new ExtensionSettings(); 
    extSettings.ParameterValues = extensionParams; 
    extSettings.Extension = "Report Server Email"; 
    
    //FYI date must be in ISO 8601 format. This sets it to one minute from now, and will only run once. 
    string matchData = $"<ScheduleDefinition><StartDateTime>{DateTime.Now.AddMinutes(1).ToString("s")}</StartDateTime></ScheduleDefinition>"; 
    
    reportingService.CreateSubscription(reportName, extSettings, fileName, "TimedSubscription", matchData, reportParameters); 
    
    関連する問題