MODULE Mailer; (* ========================================================================= Example SMTP Mail Program Author : C.F. Burrows Created : Jun 2007 (c) 2007-2008 CFB Software http://www.cfbsoftware.com/gpcp ========================================================================= *) IMPORT Cfg := "[System.Configuration]System.Configuration", Col := "[mscorlib]System.Collections", ColSpc := "[System]System.Collections.Specialized", Cpm := "[System]System.ComponentModel", Drw := "[System.Drawing]System.Drawing", IO := "[mscorlib]System.IO", SMTP := "[System]System.Net.Mail", Sys := "[mscorlib]System", Txt := "[mscorlib]System.Text", Wfm := "[System.Windows.Forms]System.Windows.Forms", RTS, WinMain; TYPE MenuForm* = POINTER TO RECORD (Wfm.Form) components: Cpm.Container; mainMenu: Wfm.MenuStrip; fileMenu: Wfm.ToolStripMenuItem; newMenu: Wfm.ToolStripMenuItem; exitMenu: Wfm.ToolStripMenuItem; sendMenu: Wfm.ToolStripMenuItem; panelSubject: Wfm.Panel; labelServer: Wfm.Label; textServer: Wfm.TextBox; labelFrom: Wfm.Label; textFrom: Wfm.TextBox; labelTo: Wfm.Label; textTo: Wfm.TextBox; labelSubject: Wfm.Label; textSubject: Wfm.TextBox; richText: Wfm.RichTextBox; statusBar: Wfm.StatusBar END; VAR frm: MenuForm; (* ==================================================================== *) PROCEDURE (frm: MenuForm) Dispose*(disposing: BOOLEAN); BEGIN IF disposing THEN IF frm.components # NIL THEN frm.components.Dispose() END; frm.Dispose^(disposing) END END Dispose; (* ==================================================================== *) (* Menu Event Handlers *) (* ==================================================================== *) PROCEDURE (frm: MenuForm) NewAction(sender: Sys.Object; e: Sys.EventArgs), NEW; BEGIN frm.richText.Clear() END NewAction; (* ==================================================================== *) PROCEDURE (frm: MenuForm) ExitAction(sender: Sys.Object; e: Sys.EventArgs), NEW; BEGIN frm.Close() END ExitAction; (* ==================================================================== *) PROCEDURE (frm: MenuForm) SendAction(sender: Sys.Object; e: Sys.EventArgs), NEW; VAR message: SMTP.MailMessage; client: SMTP.SmtpClient; from, to, subject, body: Sys.String; result: Wfm.DialogResult; errorMsg: Sys.String; BEGIN from := frm.textFrom.get_Text(); to := frm.textTo.get_Text(); subject := frm.textSubject.get_Text(); body := frm.richText.get_Text(); client := SMTP.SmtpClient.init(frm.textServer.get_Text()); message := SMTP.MailMessage.init(from, to, subject, body); client.Send(message); RESCUE (SendFailed) errorMsg := MKSTR(RTS.getStr(SendFailed)^); result := Wfm.MessageBox.Show(errorMsg, 'Send Failed', Wfm.MessageBoxButtons.OKCancel, Wfm.MessageBoxIcon.Exclamation) END SendAction; (* ==================================================================== *) PROCEDURE (frm: MenuForm) CreateMainMenu(), NEW; VAR i: INTEGER; sc: Wfm.Shortcut; BEGIN NEW(frm.mainMenu); NEW(frm.fileMenu); NEW(frm.newMenu); NEW(frm.sendMenu); NEW(frm.exitMenu); frm.fileMenu.set_Text("&File"); frm.newMenu.set_Text("&New"); frm.sendMenu.set_Text("&Send"); frm.exitMenu.set_Text("E&xit"); frm.newMenu.set_ShortcutKeys(sc.CtrlN); i := frm.mainMenu.get_Items().Add(frm.fileMenu); i := frm.fileMenu.get_DropDownItems().Add(frm.newMenu); i := frm.fileMenu.get_DropDownItems().Add(frm.sendMenu); i := frm.fileMenu.get_DropDownItems().Add(frm.exitMenu); REGISTER(frm.newMenu.Click, frm.NewAction); REGISTER(frm.sendMenu.Click, frm.SendAction); REGISTER(frm.exitMenu.Click, frm.ExitAction); frm.get_Controls().Add(frm.mainMenu) END CreateMainMenu; (* ==================================================================== *) PROCEDURE NewLabel(parent: Wfm.Control; VAR lbl: Wfm.Label; s: Sys.String; col, row: INTEGER); BEGIN NEW(lbl); lbl.set_Location(Drw.Point.init(col, row)); lbl.set_Text(s); lbl.set_AutoSize(TRUE); parent.get_Controls().Add(lbl) END NewLabel; (* ==================================================================== *) PROCEDURE NewTextBox(parent: Wfm.Control; VAR tb: Wfm.TextBox; width, col, row: INTEGER); BEGIN NEW(tb); tb.set_Location(Drw.Point.init(col, row)); tb.set_Size(Drw.Size.init(width, 20)); parent.get_Controls().Add(tb) END NewTextBox; (* ==================================================================== *) PROCEDURE (frm: MenuForm) InitializeComponent(), NEW; CONST frmWidth = 500; frmHeight = 400; statusHeight = 20; rowHeight = 16; panelHeight = 10 * rowHeight; BEGIN NEW(frm.components); NEW(frm.richText); NEW(frm.panelSubject); NEW(frm.statusBar); frm.panelSubject.SuspendLayout(); frm.SuspendLayout(); frm.set_Text("Mailer"); frm.set_AutoScaleBaseSize(Drw.Size.init(5, 13)); frm.set_ClientSize(Drw.Size.init(frmWidth, frmHeight)); frm.set_FormBorderStyle(Wfm.FormBorderStyle.Sizable); frm.statusBar.set_Location(Drw.Point.init(0, frmHeight - statusHeight)); frm.statusBar.set_ShowPanels(FALSE); frm.statusBar.set_Size(Drw.Size.init(frmWidth, statusHeight)); frm.richText.set_Dock(Wfm.DockStyle.Fill); frm.richText.set_Location(Drw.Point.init(0, 48)); NewLabel(frm.panelSubject, frm.labelServer, 'Server:', 16, 1 * rowHeight); NewTextBox(frm.panelSubject, frm.textServer, 350, 64, 1 * rowHeight); NewLabel(frm.panelSubject, frm.labelFrom, 'From:', 16, 3 * rowHeight); NewTextBox(frm.panelSubject, frm.textFrom, 350, 64, 3 * rowHeight); NewLabel(frm.panelSubject, frm.labelTo, 'To:', 16, 5 * rowHeight); NewTextBox(frm.panelSubject, frm.textTo, 350, 64, 5 * rowHeight); NewLabel(frm.panelSubject, frm.labelSubject, 'Subject:', 16, 7 * rowHeight); NewTextBox(frm.panelSubject, frm.textSubject, 350, 64, 7 * rowHeight); frm.panelSubject.set_Size(Drw.Size.init(frmWidth, panelHeight)); frm.panelSubject.set_Location(Drw.Point.init(0, 0)); frm.panelSubject.set_Dock(Wfm.DockStyle.Top); frm.textServer.set_Text(''); frm.get_Controls().Add(frm.statusBar); frm.get_Controls().Add(frm.richText); frm.get_Controls().Add(frm.panelSubject); frm.CreateMainMenu(); frm.panelSubject.ResumeLayout(FALSE); frm.ResumeLayout(FALSE) END InitializeComponent; (* ==================================================================== *) BEGIN NEW(frm); frm.InitializeComponent(); (* XP Styles *) Wfm.Application.EnableVisualStyles(); Wfm.Application.Run(frm) END Mailer.