• <menu id="w2i4a"></menu>
  • logo FastReport.Net教程2019

    文檔首頁>>FastReport.Net教程2019>>FastReport教程:如何從.Net Core應(yīng)用程序中的數(shù)據(jù)庫向Email發(fā)送報表

    FastReport教程:如何從.Net Core應(yīng)用程序中的數(shù)據(jù)庫向Email發(fā)送報表


    下載FastReport.Net最新版本

    我們已經(jīng)討論過如何將報表發(fā)送到數(shù)據(jù)庫中的一組電子郵件。在本文中,我們將做同樣的事情,但對于.Net Core MVC平臺上的Web應(yīng)用程序。我們的任務(wù)是從某個數(shù)據(jù)庫中獲取電子郵件地址和用戶名列表,并將帶有附加報表的電子郵件發(fā)送到這些郵箱。我們使用MS SQL Server數(shù)據(jù)庫。

    FastReport

    創(chuàng)建一個ASP應(yīng)用程序.Net Core MVC應(yīng)用程序。首先,使用NuGet Packages Manager將必要的庫添加到項目中。在一般的nuget存儲庫中,我們找到并安裝包:

    • Microsoft.EntityFrameworkCore;
    • Microsoft.EntityFrameworkCore.Relational;
    • Microsoft.jQuery.Unobtrusive.Ajax;
    • jQuery.

    從本地存儲庫 - FastReport.Net安裝目錄中的Nuget文件夾,安裝軟件包:

    • FastReport.Core;
    • FastReport.Web.

    現(xiàn)在我們將使用數(shù)據(jù)庫和表的類本質(zhì)創(chuàng)建工作上下文。為此,請打開包控制臺Nuget。打開Tools - > Nuget Package Manager - >Package Manager Console menu(包管理器控制臺菜單)。在控制臺中,鍵入以下命令:

    Server=localhost;Database=testdb;Trusted_Connection=True;

    Microsoft.EntityFrameworkCore.SqlServer -OutputDir模型 當(dāng)然,在這里您必須指定數(shù)據(jù)庫服務(wù)器的連接字符串和數(shù)據(jù)模型的文件夾(默認(rèn)情況下為Models)。

    PM> scaffold-dbcontext“Server = localhost; Database = testdb; Trusted_Connection = True;”

    Microsoft.EntityFrameworkCore.SqlServer -OutputDir模型 之后,理論上,應(yīng)該將兩個文件添加到Models文件夾:context和table實體。在我的例子中,這是testdbContext.cs和Emails.cs。 但是,在文件生成期間可能會發(fā)生錯誤:

    錯誤MSB4064:“Csc”任務(wù)不支持“SharedCompilationId”參數(shù)。

    有一個可設(shè)置的公共實例屬性。 如果發(fā)生這種情況,請在NuGet包管理器中再添加一個包:

    Microsoft.Net.Compillers

    讓我們馬上將FastReport連接到我們的項目。在Startup.cs文件中,添加以下行:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
     {
    …
     app.UseFastReport();
    …
    }

    現(xiàn)在回到數(shù)據(jù)模型。要從數(shù)據(jù)庫中獲取記錄,我們需要創(chuàng)建GetEmails方法。創(chuàng)建用于處理數(shù)據(jù)的類Facade:

    namespace WebMailing.Models
    {
     public static class Facade
     {
     public static ListGetEmails()
     {
     using (Models.testdbContext context = new Models.testdbContext())
     {
     var emails = (from adresses in context.Emails
     select adresses).ToList();
     return emails;
     }
     }
     }
    }

    我們來看看'HomeController'控制器吧。在Index方法中,加載報表以在站點的主頁上顯示它:

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using Microsoft.AspNetCore.Mvc;
    using WebMailing.Models;
    using FastReport;
    using FastReport.Export.Pdf;
    using FastReport.Export.Email;
    using FastReport.Web;
    …
    public IActionResult Index()
    {
     WebReport webReport = new WebReport();
     webReport.Report.Load(Environment.CurrentDirectory + "/text.frx");
     ViewBag.WebReport = webReport;
     return View();
    }

    我們將添加兩種發(fā)送電子郵件的方法。第一個將在問候語中發(fā)送帶有客戶名稱的私人信件,第二個將向一組地址發(fā)送一個字母。 所以,第一種方法是:

    [HttpPost]
     public ActionResult SendMail()
     {
     Report report1 = new Report(); //Create new report object
     report1.Load(Environment.CurrentDirectory + "/text.frx"); //Load report
     report1.Prepare(); //Prepare report
     
     PDFExport pdf = new PDFExport(); //Cteate PDF export
     EmailExport email = new EmailExport(); //Create Email export
     
     Listemails = Models.Facade.GetEmails();
     foreach (Emails item in emails)
     {
     SendMessage(report1, pdf, email, item.Email, item.Name);
     }
     return View();
     }

    使用它,我們創(chuàng)建了一個報表,導(dǎo)出為PDF,導(dǎo)出到電子郵件。然后,在循環(huán)中,我們從表中獲取記錄并調(diào)用發(fā)送字母的方法。作為參數(shù),我們傳遞報表對象,導(dǎo)出PDF,導(dǎo)出到電子郵件,電子郵件地址和客戶端名稱。以下是發(fā)送信件的方法:

    public void SendMessage(Report report, PDFExport pdf, EmailExport email, string recipient, string custName)
     {
     string message = "This is test message.";
     email.Account.Address = "gromozekaster@yandex.ru";
     email.Account.Name = "Test User";
     email.Account.Host = "smtp.yandex.ru";
     email.Account.Port = 25;
     email.Account.UserName = "Gromozekaster";
     email.Account.Password = "*****"; //Your password
     email.Account.MessageTemplate = "Test";
     email.Account.EnableSSL = true;
     //email addressee settings
     email.Address = recipient;
     email.Subject = "TestMessage";
     email.MessageBody = custName is null ? message : string.Format("Dear, {0}! {1}", custName, message);
     email.Export = pdf; //Set export type
     email.SendEmail(report); //Send email
     }

    在其中,我們設(shè)置了一個電子郵件客戶端來發(fā)送信件。并立即添加第二種方法,將一個字母發(fā)送到一組地址:

     [HttpPost]
     public ActionResult SendAll()
     {
     Report report1 = new Report(); //Create new report object
     report1.Load(Environment.CurrentDirectory + "/text.frx"); //Load report
     report1.Prepare(); //Prepare report
     PDFExport pdf = new PDFExport(); //Cteate PDF export
     EmailExport email = new EmailExport(); //Create Email export
     
     Listemails = Models.Facade.GetEmails();
     string addresses = "";
     foreach (Emails item in emails)
     {
     if (addresses == "")
     addresses = item.Email;
     else
     addresses = addresses + ", " + item.Email;
     }
     SendMessage(report1, pdf, email, addresses, null);
     return View();
     }

    正如您所看到的,它與之前的方法非常相似,唯一的區(qū)別是在循環(huán)中我們收到所有電子郵件地址,并發(fā)送一次這封信。作為電子郵件參數(shù),我們傳遞一個包含所有電子郵件地址的字符串變量,但我們不傳遞客戶端名稱。

    對于SendMail()和SendAll()方法,我們需要創(chuàng)建相同名稱的視圖 - 視圖。 他們的內(nèi)容非常簡單:

    @{
     ViewBag.Message = "Report was sent";
    }
    @ViewBag.Message

    我們只是告知發(fā)送。讓我們轉(zhuǎn)到Index.cshtml視圖。在其中,我們需要添加兩個按鈕來使用不同的方法發(fā)送字母,以及顯示報表:

    @{
     ViewData["Title"] = "Home Page";
    }@await ViewBag.WebReport.Render()

    要使用ajax jquery,我們添加了一個指向jquery.min.js腳本的鏈接。接下來,為每個表單添加一個帶有兩個按鈕和兩個腳本的表單。腳本非常簡單 - 從控制器調(diào)用方法并返回結(jié)果視圖。

    最后 - 我們從Index方法推導(dǎo)出報表。讓我們運(yùn)行應(yīng)用程序,看看我們的網(wǎng)頁是什么樣的:

    FastReport

    我們通過不同的方式發(fā)信:

    FastReport

    和:

    FastReport

    在第一種情況下,在信函的文本中,我們通過名稱引用客戶端,在第二種情況下,沒有,就這樣。

    購買FastReport.Net正版授權(quán),請點擊“咨詢在線客服”喲!

    慧都315特惠
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();