翻譯|使用教程|編輯:王香|2019-03-21 10:38:02.000|閱讀 523 次
概述:某個數據庫中獲取電子郵件地址和用戶名列表,并將帶有附加報表的電子郵件發送到這些郵箱
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
我們已經討論過如何將報表發送到數據庫中的一組電子郵件。在本文中,我們將做同樣的事情,但對于.Net Core MVC平臺上的Web應用程序。我們的任務是從某個數據庫中獲取電子郵件地址和用戶名列表,并將帶有附加報表的電子郵件發送到這些郵箱。我們使用MS SQL Server數據庫。
創建一個ASP應用程序.Net Core MVC應用程序。首先,使用NuGet Packages Manager將必要的庫添加到項目中。在一般的nuget存儲庫中,我們找到并安裝包:
從本地存儲庫 - FastReport.Net安裝目錄中的Nuget文件夾,安裝軟件包:
現在我們將使用數據庫和表的類本質創建工作上下文。為此,請打開包控制臺Nuget。打開Tools - > Nuget Package Manager - >Package Manager Console menu(包管理器控制臺菜單)。在控制臺中,鍵入以下命令:
Server=localhost;Database=testdb;Trusted_Connection=True;
Microsoft.EntityFrameworkCore.SqlServer -OutputDir模型 當然,在這里您必須指定數據庫服務器的連接字符串和數據模型的文件夾(默認情況下為Models)。
PM> scaffold-dbcontext“Server = localhost; Database = testdb; Trusted_Connection = True;”
Microsoft.EntityFrameworkCore.SqlServer -OutputDir模型 之后,理論上,應該將兩個文件添加到Models文件夾:context和table實體。在我的例子中,這是testdbContext.cs和Emails.cs。 但是,在文件生成期間可能會發生錯誤:
錯誤MSB4064:“Csc”任務不支持“SharedCompilationId”參數。
有一個可設置的公共實例屬性。 如果發生這種情況,請在NuGet包管理器中再添加一個包:
Microsoft.Net.Compillers
讓我們馬上將FastReport連接到我們的項目。在Startup.cs文件中,添加以下行:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { … app.UseFastReport(); … }
現在回到數據模型。要從數據庫中獲取記錄,我們需要創建GetEmails方法。創建用于處理數據的類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(); }
我們將添加兩種發送電子郵件的方法。第一個將在問候語中發送帶有客戶名稱的私人信件,第二個將向一組地址發送一個字母。 所以,第一種方法是:
[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(); }
使用它,我們創建了一個報表,導出為PDF,導出到電子郵件。然后,在循環中,我們從表中獲取記錄并調用發送字母的方法。作為參數,我們傳遞報表對象,導出PDF,導出到電子郵件,電子郵件地址和客戶端名稱。以下是發送信件的方法:
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 }
在其中,我們設置了一個電子郵件客戶端來發送信件。并立即添加第二種方法,將一個字母發送到一組地址:
[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(); }
正如您所看到的,它與之前的方法非常相似,唯一的區別是在循環中我們收到所有電子郵件地址,并發送一次這封信。作為電子郵件參數,我們傳遞一個包含所有電子郵件地址的字符串變量,但我們不傳遞客戶端名稱。
對于SendMail()和SendAll()方法,我們需要創建相同名稱的視圖 - 視圖。 他們的內容非常簡單:
@{ ViewBag.Message = "Report was sent"; } @ViewBag.Message
我們只是告知發送。讓我們轉到Index.cshtml視圖。在其中,我們需要添加兩個按鈕來使用不同的方法發送字母,以及顯示報表:
@{ ViewData["Title"] = "Home Page"; }@await ViewBag.WebReport.Render()
要使用ajax jquery,我們添加了一個指向jquery.min.js腳本的鏈接。接下來,為每個表單添加一個帶有兩個按鈕和兩個腳本的表單。腳本非常簡單 - 從控制器調用方法并返回結果視圖。
最后 - 我們從Index方法推導出報表。讓我們運行應用程序,看看我們的網頁是什么樣的:
我們通過不同的方式發信:
和:
在第一種情況下,在信函的文本中,我們通過名稱引用客戶端,在第二種情況下,沒有,就這樣。
購買FastReport.Net正版授權,請點擊“”喲!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn