using System; using System.Collections.Generic; using System.Windows.Forms; using System.Text.RegularExpressions; using FastReport.Forms; using FastReport.Utils; namespace FastReport.Export.Email { /// /// Form for . /// For internal use only. /// public partial class EmailExportForm : BaseDialogForm { private EmailExport export; private List exports; // Create the ToolTip and associate with the Form container. private ToolTip ttCC = new ToolTip(); private string ttCCText; private bool IsValidEmail(string strIn) { // Return true if strIn is in valid e-mail format. return Regex.IsMatch(strIn, @"^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))" + @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$"); } private void EmailExportForm_Shown(object sender, EventArgs e) { if (String.IsNullOrEmpty(tbAddressFrom.Text) || String.IsNullOrEmpty(tbHost.Text)) { pageControl1.ActivePageIndex = 1; if (String.IsNullOrEmpty(tbAddressFrom.Text)) tbAddressFrom.Focus(); else tbHost.Focus(); } else { cbxAddressTo.Focus(); if (!export.Account.AllowUI) { pageControl1.Width -= pageControl1.SelectorWidth; Width -= pageControl1.SelectorWidth; pageControl1.SelectorWidth = 0; } } } private void cbxAttachment_SelectedIndexChanged(object sender, EventArgs e) { btnSettings.Enabled = cbxAttachment.SelectedIndex > 0; } private void btnSettings_Click(object sender, EventArgs e) { ExportBase export = exports[cbxAttachment.SelectedIndex]; export.SetReport(this.export.Report); export.ShowDialog(); } private void Init() { XmlItem xi = Config.Root.FindItem("EmailExport").FindItem("AccountSettings"); // restore account info from the config if (String.IsNullOrEmpty(export.Account.Address)) { export.Account.Address = xi.GetProp("Address"); export.Account.Name = xi.GetProp("Name"); export.Account.MessageTemplate = xi.GetProp("Template"); export.Account.Host = xi.GetProp("Host"); string port = xi.GetProp("Port"); if (port != "") export.Account.Port = int.Parse(port); export.Account.UserName = Crypter.DecryptString(xi.GetProp("UserName")); export.Account.Password = Crypter.DecryptString(xi.GetProp("Password")); export.Account.EnableSSL = xi.GetProp("EnableSSL") == "1"; } // fill account info tbAddressFrom.Text = export.Account.Address; tbName.Text = export.Account.Name; tbTemplate.Text = export.Account.MessageTemplate; tbHost.Text = export.Account.Host; udPort.Value = export.Account.Port; tbUserName.Text = export.Account.UserName; tbPassword.Text = export.Account.Password; cbEnableSSL.Checked = export.Account.EnableSSL; // fill email tbNameAttach.Text = export.Report.GetReportName; if (!String.IsNullOrEmpty(export.NameAttachmentFile)) { tbNameAttach.Text = export.NameAttachmentFile; } string[] addresses = xi.GetProp("RecentAddresses").Split('\r'); cbxAddressTo.Items.AddRange(addresses); if (!String.IsNullOrEmpty(export.Address)) cbxAddressTo.Text = export.Address; else if (cbxAddressTo.Items.Count > 0) cbxAddressTo.SelectedIndex = 0; string[] cc = export.CC; if (cc != null) { for (int i = 0; i < cc.Length; i++) tbCC.Text += cc[i] + (i < cc.Length - 1 ? ";" : ""); } string[] subjects = xi.GetProp("RecentSubjects").Split('\r'); cbxSubject.Items.AddRange(subjects); if (!String.IsNullOrEmpty(export.Subject)) cbxSubject.Text = export.Subject; else if (cbxSubject.Items.Count > 0) cbxSubject.SelectedIndex = 0; if (!String.IsNullOrEmpty(export.MessageBody)) tbMessage.Text = export.MessageBody; else tbMessage.Text = tbTemplate.Text; // fill exports exports = new List(); List list = new List(); RegisteredObjects.Exports.EnumItems(list); int exportIndex = 0; cbxAttachment.Items.Add(Res.Get("Preview,SaveNative")); exports.Add(null); foreach (ObjectInfo info in list) { if (info.Object != null) { cbxAttachment.Items.Add(Res.TryGet(info.Text)); exports.Add(Activator.CreateInstance(info.Object) as ExportBase); if (export.Export != null && export.Export.GetType() == info.Object) exportIndex = exports.Count - 1; } } string recentExport = xi.GetProp("RecentExport"); if (exportIndex != 0) cbxAttachment.SelectedIndex = exportIndex; else if (recentExport != "") cbxAttachment.SelectedIndex = int.Parse(recentExport); else cbxAttachment.SelectedIndex = 0; } private bool Done() { if (!IsValidEmail(tbAddressFrom.Text)) { pageControl1.ActivePageIndex = 1; FRMessageBox.Error(Res.Get("Export,Email,AddressError")); tbAddressFrom.Focus(); return false; } if (String.IsNullOrEmpty(tbHost.Text)) { pageControl1.ActivePageIndex = 1; FRMessageBox.Error(Res.Get("Export,Email,HostError")); tbHost.Focus(); return false; } if (!IsValidEmail(cbxAddressTo.Text)) { pageControl1.ActivePageIndex = 0; FRMessageBox.Error(Res.Get("Export,Email,AddressError")); cbxAddressTo.Focus(); return false; } XmlItem xi = Config.Root.FindItem("EmailExport").FindItem("AccountSettings"); // get account info export.Account.Address = tbAddressFrom.Text; export.Account.Name = tbName.Text; export.Account.MessageTemplate = tbTemplate.Text; export.Account.Host = tbHost.Text; export.Account.Port = (int)udPort.Value; export.Account.UserName = tbUserName.Text; export.Account.Password = tbPassword.Text; export.Account.EnableSSL = cbEnableSSL.Checked; // save account info xi.SetProp("Address", export.Account.Address); xi.SetProp("Name", export.Account.Name); xi.SetProp("Template", export.Account.MessageTemplate); xi.SetProp("Host", export.Account.Host); xi.SetProp("Port", export.Account.Port.ToString()); xi.SetProp("UserName", Crypter.EncryptString(export.Account.UserName)); xi.SetProp("Password", Crypter.EncryptString(export.Account.Password)); xi.SetProp("EnableSSL", export.Account.EnableSSL ? "1" : "0"); // get email info export.Address = cbxAddressTo.Text.Trim(); export.CC = tbCC.Text.Trim() == "" ? null : tbCC.Text.Trim().Split(';'); export.Subject = cbxSubject.Text; export.MessageBody = tbMessage.Text; export.NameAttachmentFile = tbNameAttach.Text; export.Export = exports[cbxAttachment.SelectedIndex]; // save email info string addresses = "\r" + cbxAddressTo.Text + "\r"; foreach (object obj in cbxAddressTo.Items) { string address = obj.ToString(); if (!addresses.Contains("\r" + address + "\r")) addresses += address + "\r"; } addresses = addresses.Substring(1, addresses.Length - 2); xi.SetProp("RecentAddresses", addresses); string subjects = "\r" + cbxSubject.Text + "\r"; foreach (object obj in cbxSubject.Items) { string subject = obj.ToString(); if (!subjects.Contains("\r" + subject + "\r")) subjects += subject + "\r"; } subjects = subjects.Substring(1, subjects.Length - 2); xi.SetProp("RecentSubjects", subjects); xi.SetProp("RecentExport", cbxAttachment.SelectedIndex.ToString()); return true; } /// /// Hides attachment settings. /// For internal use only. /// public void HideAttachmentSettings() { lblAttachment.Visible = false; cbxAttachment.Visible = false; btnSettings.Visible = false; } /// public override void Localize() { base.Localize(); MyRes res = new MyRes("Export,Email"); Text = res.Get(""); pgEmail.Text = res.Get("Email"); lblAddressTo.Text = res.Get("Address"); lblCC.Text = res.Get("CC"); ttCCText = res.Get("CCTooltip"); lblSubject.Text = res.Get("Subject"); lblMessage.Text = res.Get("Message"); lblAttachment.Text = res.Get("Attachment"); btnSettings.Text = res.Get("Settings"); pgAccount.Text = res.Get("Account"); lblAddressFrom.Text = res.Get("Address"); lblName.Text = res.Get("Name"); lblTemplate.Text = res.Get("Template"); lblHost.Text = res.Get("Host"); lblPort.Text = res.Get("Port"); lblUserName.Text = res.Get("UserName"); lblPassword.Text = res.Get("Password"); cbEnableSSL.Text = res.Get("EnableSSL"); lblNameAttcach.Text = res.Get("NameAttachmentFile"); } private void EmailExportForm_FormClosing(object sender, FormClosingEventArgs e) { if (DialogResult == DialogResult.OK) if (!Done()) e.Cancel = true; } /// /// Initializes a new instance of the class. /// public EmailExportForm(EmailExport export) { this.export = export; InitializeComponent(); Localize(); Init(); UIUtils.CheckRTL(this); UpdateDpiDependencies(); } private void tbCC_MouseMove(object sender, MouseEventArgs e) { ttCC.SetToolTip(this.tbCC, ttCCText); } } }