FastReport教程:如何在WinForms應用程序中從數據庫郵件發送報表
報表是工作流程和電子報表(電子工作流程)不可或缺的一部分。分發電子報表的主要機制之一是電子郵件。也許,所有現代報表生成器都有一個內置的郵件客戶端,可以直接從程序發送報表。
FastReport.Net也不例外。您可以在預覽模式下發送報表,也可以直接從用戶應用程序的代碼發送報表。如果您向單個收件人發送報表,這很方便。雖然可以添加多個收件人,但并不總是合適。例如,當您想要制作一個包含用戶名稱的簡報時:“親愛的,Ivan Ivanovich ......”。因此,我們考慮如何向多個收件人發送報表的示例,其地址和名稱取自數據庫。首先,在其中創建一個數據庫和一個表。例如,以mdb格式訪問數據庫:

創建一個WinForms應用程序。將電子郵件設置的兩個按鈕和文本字段添加到表單:

第一個按鈕將按名稱發送報表,第二個按鈕將報表發送到地址列表。您將從代碼中了解其工作原理。 每個字段都有一個默認值; 如果您愿意,可以輸入不同的值。
使用向導創建應用程序數據源:

接下來,我們將連接字符串配置到數據庫并選擇表:

將FastReport庫的鏈接添加到項目中。我們還需要一個包含報告模板的文件,我們將發送該文件。將其添加到項目中。例如,我們將使用Demo文件夾中的報告text.frx。
現在為Direct email按鈕事件創建一個處理程序:
using System;
using System.Data;
using System.Windows.Forms;
using FastReport;
using FastReport.Utils;
using FastReport.Export.Pdf;
using FastReport.Export.Email;
private void SendReport_Click(object sender, EventArgs e)
{
Config.ReportSettings.ShowProgress = false; //Disable progress window
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
EmailsDataSet ds = new EmailsDataSet();
EmailsDataSetTableAdapters.CustomerTableAdapter adapter = new EmailsDataSetTableAdapters.CustomerTableAdapter();
adapter.Fill(ds.Customer);
DataTable table = ds.Customer;
foreach (DataRow row in table.Rows)
{
SendMessage(report1, pdf, email, row["Email"].ToString(), row["Name"].ToString());
}
}這里我們首先創建報表對象,將模板加載到其中,創建導出到PDF和電子郵件。該報告將附在PDF格式的信件中。
接下來,我們創建一個數據源,用數據填充表。我們查看表格條目,并為每個條目發送一封信。當然,如果你有一個龐大的郵件列表,這種方法會很慢。但是你可以在信件的文本中插入客戶的名字。
正如您所注意到的,我們已經將這封信發送到一個單獨的方法 - SendMessage:
public void SendMessage(Report report, PDFExport pdf, EmailExport email, string recipient, string custName)
{
email.Account.Address = AddressFromTxt.Text;
email.Account.Name = SenderNameTxt.Text;
email.Account.Host = HostTxt.Text;
email.Account.Port = Convert.ToInt16(PortTxt.Text);
email.Account.UserName = UserNameTxt.Text;
email.Account.Password = PasswordTxt.Text;
email.Account.MessageTemplate = "Test";
email.Account.EnableSSL = true;
email.Address = recipient;
email.Subject = MailSubjectTxt.Text;
email.MessageBody = custName is null? MessageTxt.Text : string.Format("Dear, {0}! {1}", custName, MessageTxt.Text);
email.Export = pdf; //Set export type
email.SendEmail(report); //Send email
}對于Send to all按鈕,讓我們創建一個OnClick事件處理程序:
private void Send_to_all_Click(object sender, EventArgs e)
{
Config.ReportSettings.ShowProgress
PDFExport(); //Cteate PDF export
EmailExport email = new EmailExport(); //Create Email export
= ds.Customer;
foreach (DataRow row in table.Rows)
{
if (emails == "")
emails
;
MessageBox.Show(emails);
}與前面的代碼不同,在循環中我們添加地址以發送給變量,然后將其傳遞給消息發送方法。此方法比前一個方法工作得快得多,特別是如果郵件列表很大。為自己判斷,在這里你發一封信,而不是一套。
因此,發送報表的任務減少為導出到電子郵件并從數據庫向每個地址發送一封信。
購買FastReport.Net正版授權,請點擊“”喲!

QQ交談
在線咨詢

渝公網安備
50010702500608號

客服熱線