C # Builder implementation of the monitor of POP3 mailbox

zhaozj2021-02-08  238

Author: Xu Changyou (

Http://yousoft.hi.com.cn

Abstract: Borland's C # Builder is a C # language programming tool, C # Builder allows developers to develop by Java or CORBA tools, C # Builder also has the ability to read data from multiple databases, can be mixed and adapt to different development Standard capacity. This article describes how to write a mailbox monitoring program with Borland C # Builder, and the program is primarily network communication through WINSOCK. To implement this program, there must be a certain understanding of the POP3 protocol. The following is a rough introduction to the POP3 protocol. The reader can see the RFC 1225 to understand the agreement in more detail. 1. Pop3 protocol brief introduction POP3 server program is usually served in TCP port 110. When the customer wants to use the service, it creates a TCP connection with the server. Once the connection is established, the POP3 server sends a welcome message to the customer. The client then starts a command to the server, and the server gives the corresponding answer. The command of POP3 is composed of a keyword or keyword plus parameters. Each command is used as an end flag in the return line (0xD0XA). For all commands, POP3 servers provide an answer. The answer from the server is composed of some additional information. The two signs currently used are " OK" and "-err", indicating whether the customer's command is legal. All answered is also over the return line. The four POP3 commands related to topics discussed herein are User, Pass, Stat, and Quit. User Command Format User Name Where Name is the user ID of the user on the POP3 server. Customers should send this command after receiving the welcome message from the server or after the last user or pass failed. Pass command format pass string where string is the password of the user. The customer can send this command after sending the user command and receives a OK answer. If the username and password are correct, the server answers OK, otherwise -ERR. The Stat command format The stat stat command is the case where the mailbox is viewed. There are two numbers in the response of the stat command, indicating the number of messages, and the size of the message. The quit command exits logging in from the POP3 server. Second, the monitor program of the POP3 mailbox is to analyze the procedures we prepare to implement the following features: 1. Tray icon, program run, only a pallet icon, right-click the tray icon to pop up menu. 2. Get the number of emails, based on the POP3 protocol, get the number of messages. 3. Read and write the registry, save the server, username, password, etc. set in the registry. 4. User prompt information, here we do a prompt window with MSN. Third, the program is implemented below. Let's take our procedure. First, open Borland C # Builder, create a new project, menu file-> C # Applicaion project name may wish to be set to "ChKPOP3", as shown below:

[Related map]

Design the main window, as shown below:

[Related map]

It mainly includes five text boxes, five labels, three buttons, a selection box and a Timer. WinForm is set as follows: Text: Collecting a message StartPosition: CenterScreenMaximizeBox: false Three Button: Minimize Button: Minimize Window, here is the hidden main window. Take the mail button: implement the number of messages in the POP3 mailbox, and prompt with the information window. Application Button: Save the function of setting to the registry in the registry: Complete the number of mail boxes in the POP3 mailbox within a certain time interval. 1. Implementation of the tray: From the Tool Palette Select Component ContextMenu (add two menu items, settings, and exit), Notifyicon (Text is set to: email detection, icon icon Select a 16x16 small icon, ContextMenu is set to front Add ContextMenu1, Visible is set to true) This complete tray program is set. 2. User Tips Implementation: New Window WinForm1, set the form's FORMBORDERSTYLE attribute to none, then set the TopMost property (always on the top) property to True, put the showintaskbar property (whether it is in Windows The display form in the taskbar is set to false and add a text tag on the form, set the background of the form to the image you want and the appropriate size. Finally, put three Timer controls, where the Timer1 controls the animation that rolls out, Timer2 controls the form, the Timer3 controls the window, set their interval attribute to 10, as shown: [related贴 图]

WinForm1 code is as follows: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace pop3 {///

/// Summary description for WinForm1 . /// public class WinForm1:. System.Windows.Forms.Form {/// /// Required designer variable /// private System.ComponentModel.IContainer components; private System .Windows.Forms.Timer timer1; private System.Windows.Forms.Timer timer2; private System.Windows.Forms.Timer timer3; private System.Windows.Forms.LinkLabel linkLabel1; public string str_num; public WinForm1 () {// / / Required for Windows FormOgner Support // InitializationComponent (); /// Todo: address (// //} /// /// clean up any resources being used. /// Protected Override Void Dispose (Bool Disposing) {if (disponents! = null) {components.dispose (); } Base.Dispose (Disposing);} #Region Windows Form Designer generated code /// /// Required method for Designer Support - do not modifi ////////////////////////////////////////////////////////////////////////////////////////////////> private void InitializeComponent () {this.components = new System.ComponentModel.Container (); System.Resources.ResourceManager resources = new System.Resources.ResourceManager (typeof (WinForm1)); this.timer1 = new System. Windows.Forms.Tims; this.timer2 = new system.windows.forms.timer (this.Components); this.timer3 = new system.windows.forms.timer (this.Components); this.linklabel1 =

New system.windows.Forms.LinkLabel (); this.suspendlayout (); // // Timer1 // this.timer1.interval = 10; this.timer1.tick = new system.EventHandler (this.timer1_thing); / / // Timer2 // this.timer2.interval = 10; this.timer2.tick = new system.eventhandler (this.timer2_tick); // // Timer3 // this.timer3.interval = 10; this.timer3. Tick ​​ = new System.EventHandler (this.timer3_Tick); // // linkLabel1 // this.linkLabel1.AutoSize = true; this.linkLabel1.BackColor = System.Drawing.Color.WhiteSmoke; this.linkLabel1.Location = new System .Drawing.point (56, 56); this.linklabel1.name = "linklabel1"; this.linklabel1.size = new system.drawing.size (79, 17); this.linklabel1.tabindex = 0; this.LinkLabel1. Tabstop = true; this.linklabel1.text = "You have new emails!"; // // Winform1 // this.autoscalebasesize = new system.drawing.size (6, 14); this.backcolor = system.drawing.systemcolors .Info; "(System.drawing.Image) (Resources) (Resources. GetObject ( "$ this.BackgroundImage"))); this.ClientSize = new System.Drawing.Size (194, 122); this.Controls.Add (this.linkLabel1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle .None; this.name = "winform1"; this.Showintaskbar = false; this.text = "Information prompt"; this.topmost = true; this.load = new system.EventHandler (this.actiVated); this.activated = New system.eventhandler (this.winform1_activated); this.ResumeLayout (false);} #ENDREGION Private Void Winform1_load (Object Sender, System.Eventargs E) {Screen [] Screens =

Screen.allscreens; screen screen = screens [0]; this.location = new point (Screen.workingarea.width - 200, Screen.workingArea.Height - 30); this.timer2.interval = 5000; private void scroll () {IF (Height <122) {this.Height = 3; this.location = new point (this.location.x, this.location.y - 3);} else {this.timer1.enabled = false; this. Timer2.enabled = true;}} private void scrolldown () {i (Height> 3) {this.Height - = 3; this.location = new point (this.location.x, this.location.y 3); } else {this.timer3.Enabled = false; this.Close ();}} private void timer1_Tick (object sender, System.EventArgs e) {scrollUp ();} private void timer2_Tick (object sender, System.EventArgs e) { timer2.Enabled = false; timer3.Enabled = true;} private void timer3_Tick (object sender, System.EventArgs e) {scrollDown ();} public void ScrollShow () {this.Width = 194; this.Height = 0; this .Show (); this.timer1.enabled = true;} private void winform1_act Ivated (Object sender, system.eventargs e) {linkLabel1.text = "You have" STR_NUM "new mail! ";}}} Specific implementation, you can refer to an article on the Internet:" Write the scroll window of the imitation MSN Messager with VC # ", it has not been clear, you can pass this website http: //yousoft.hi .com.cn / article_view.asp? id = 6595

Browse.

3. Get the number of emails, the code is shown in: string str_server; if ((tb_server.text! = ") && (tb_user.text! =") && (tb_pwd.text! = ")) {TCPCLIENT TCPC = new TcpClient (tB_server.Text, 110); Byte [] outbytes; string input; NetworkStream ns = null; try {ns = tcpc.GetStream (); StreamReader sr = new StreamReader (ns); tB_status.Text = sr.ReadLine (); Input = "user" tb_user.text "/ r / n"; Outbytes = system.text.Encoding.ascii.getbytes (Input.ToChararray ()); ns.write (Outbytes, 0, Outbytes.length ) Tb_status.text = tb_status.text "/ r / n" sr.readline (); input = "pass" tb_pwd.text "/ r / n"; outbytes = system.text.Encoding.ASCII.GetBytes INPUT.TOCHARARRAY (); ns.write (outbytes, 0, outbytes.length) TB_STATUS.TEXT = TB_STATUS.TEXT "/ r / n" sr.readline (); input = "stat" "/ r / n "; Outbytes = system.text.Encoding.ascii.getbytes (Input.tochararray ()); ns.write (outbytes, 0, outbytes.length) str_server = sr.readline (); str_num =" "; if (str_server). StartSwith (" OK")) {str_num = STR_SERVER.SPLIT ('') [1];} else str_num = ""; tb_status.text = tb_status.text "/ r / n" "A:" STR_SERVER; Input = "qit" "/ r / n "; OUTBYTES = system.text.Encoding.ascii.getBytes (Input.Tochararray ()); ns.write (outbytes, 0, outbytes.length) TB_STATUS.TEXT = TB_STATUS.TEXT " / R / N " " B : " sr.readline ();} catch (invalidopertyException ie) {tb_status.text ="

Could Not Connect To Mail Server ";} if (str_num! =") {Winform1 Form = New Winform1 (); form.str_num = str_num; form.scrollShow ();} The program is established with a TCP connection, and then send it Some commands of POP3, take the information transmitted by the server, get the number of messages. There are two numbers in the response of thestat command, indicating the number of messages, and the size of the mail. The general format is such a " OK quantity size" , Extract OK according to the information returned according to the server, then separate the space separation. The code is shown. 4. The registry read and write: We know, to implement the program after boot, you can write a registry HKEY_CURRENT_USER / Software / Microsoft / Windows / CurrentVersion / Run implementation, in order to facilitate users, we store information such as mail servers, users, passwords into the registry, no need to lose once every time.

Saving information code is as follows: RegistryKey rk; Registry.CurrentUser.CreateSubKey ( "Software // yousoft"); rk = Registry.CurrentUser.OpenSubKey ( "Software // yousoft", true); rk.Setvalue ( "server", tB_server. TEXT); RK.SETVALUE ("User", TB_USER.TEXT); RK.SetValue ("PWD", TB_PWD.Text); RK.SetValue ("Interval", TB_Mins.Text); if (cb_autorun.checked) {rk = Registry.CurrentUser.OpenSubKey ( "Software // Microsoft // // CurrentVersion // Run Windows", true); rk.Setvalue ( "chkmail", Application.ExecutablePath);} else {rk = Registry.CurrentUser.OpenSubKey ( "Software // Microsoft // Windows // CurrentVersion // Run", true); RK.DeleteValue ("chkmail");} rk.close (); Launcher Read Information: Private Void Winform_Load (Object Sender, System .Eventargs e) {registryKey rk; rk = registry.currentuser.opensubkey ("Software // Yousoft", false; object srv = rk.getValue ("server"); if (srv! = Null) TB_SERVER.TEXT = SRV .Tostring (); Object usr = rk.getValue ("user"); if (usr! = Null) TB_USER.TEXT = usr.tostring (); Object PWD = RK.GetValue ("PWD"); if ("PWD"); PWD! = NULL) TB_PWD.TEXT = PWD.TOSTRING (); Object Mins = RK.GetValue ("interval"); if (mins! = null) TB_Mins.Text = mins.tostring (); rk.close (); } WinForm complete code is as follows: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Net.Sockets; using System.IO; using System.net; using microsoft.win32; namespace pop3 {///

/// summary description for winform. /// public class winform: system.windows.forms.form {///

/// Required designer variable /// private System.ComponentModel.IContainer components;. Private System.Windows.Forms.Button button1; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox tB_server; private System.Windows.Forms.TextBox tB_user; private System.Windows.Forms.TextBox tB_pwd; private System.Windows.Forms.TextBox tB_status; private System.Windows.Forms.NotifyIcon notifyIcon1; private System.Windows.Forms.ContextMenu contextMenu1; private System.Windows.Forms.MenuItem menuItem1; private System.Windows.Forms.MenuItem menuItem2; private System.Windows.Forms.MenuItem menuItem3; private bool f_open = true; private string str_num = ""; private System.Windows.Forms.Button button2; private System.Windows.Forms.Timer timer1; private System.Windows.Forms.TextBox tB_mins; private System.Windows. Forms.Label label4; private system.windows.forms.lab el label5; private System.Windows.Forms.Button button3; private System.Windows.Forms.CheckBox cB_autorun; public WinForm () {// // Required for Windows Form Designer support // InitializeComponent (); // // TODO: Add any constructor code after InitializeComponent call //} ///

/// Clean up any resources being used. /// protected override void Dispose (bool disposing) {if (disposing) {if (components ! = Null) {Components.dispose ();}} Base.dispose (4);} #Region Windows Form Designer generated code ///

/// Required method for Designer support - do not modify /// the contents of this method with the code editor /// private void InitializeComponent () {this.components = new System.ComponentModel.Container (). ; System.Resources.ResourceManager resources = new System.Resources.ResourceManager (typeof (WinForm)); this.button1 = new System.Windows.Forms.Button (); this.label1 = new System.Windows.Forms.Label () This.Label2 = new system.windows.forms.label (); this.label3 = new system.windows.forms.Label (); this.tb_server = new system.windows.Forms.TextBox (); this.tb_user = new System.Windows.Forms.TextBox (); this.tB_pwd = new System.Windows.Forms.TextBox (); this.tB_status = new System.Windows.Forms.TextBox (); this.notifyIcon1 = new System.Windows. Forms.NotifyIcon (this.components); this.contextMenu1 = new System.Windows.Forms.ContextMenu (); this.menuItem1 = new System.Windows.Forms.MenuItem (); this.menuItem2 = new System.Windows.Forms. Menuitem (); this .menuitem3 = new system.windows.Forms.Menuitem (); this.button2 = new system.windows.Forms.Button (); this.timer1 = new system.windows.forms.timer (this.components); this.tb_mins = New system.windows.forms.textbox (); this.label4 = new system.windows.forms.Label (); this.label5 = new system.windows.forms.label (); this.button3 = new System.Windows . Form.button (); this.cb_autorun = new system.windows.forms.checkbox (); this.suspendlayout (); // // button1 // this.button1.location = new system.drawing.point (152, 176); this.Button1.name = "button1"; this.button1.tabindex = 0; this.button1.text = "

Take the email; this.button1.click = new system.eventhandler (this.button1_click); // // label1 // this.label1.location = new system.drawing.point (24, 32); this.label1. Name = "label1"; this.label1.size = new system.drawing.size (80, 23); this.label1.tabindex = 1; this.label1.text = "Mail server:"; /// Label2 / / This.label2.location = new system.drawing.point (48, 64); this.label2.name = "label2"; this.label2.size = new system.drawing.size (56, 23); this.label2 .Tabindex = 2; this.label2.text = "Username:"; /// Label3 // this.label3.Location = new system.drawing.point (58, 96); this.label3.name = "Label3 "; This.label3.size = new system.drawing.size (48, 23); this.label3.tabindex = 3; this.label3.text =" Password: "; /// TB_SERVER // this.tb_server. Location = new system.drawing.point (112, 24); this.tb_server.name = "TB_SERVER"; this.tb_server.size = new system.drawing.size (176, 21); this.tb_server.tabindex = 4; THISTB_SERVER.TEXT = ""; " s.tB_server.TextChanged = new System.EventHandler (this.tB_pwd_TextChanged); // // tB_user // this.tB_user.Location = new System.Drawing.Point (112, 60); this.tB_user.Name = "tB_user "; This.tb_user.size = new system.drawing.size (176, 21); this.tb_user.tabindex = 5; this.tb_user.text ="; this.tb_user.textchanged = new system.Eventhandler (this .tb_pwd_textchanged; // // Tb_PWD // this.tb_pwd.location = new system.drawing.point (112, 91); this.tb_pwd.name = "tb_pwd";

THISTB_PWD.PASSWORDCHAR = '*'; this.tb_pwd.size = new system.drawing.size (176, 21); this.tb_pwd.tabindex = 6; this.tb_pwd.text = ""; this.tb_pwd.textchanged = new System.EventHandler (this.tB_pwd_TextChanged); // // tB_status // this.tB_status.Location = new System.Drawing.Point (16, 208); this.tB_status.Multiline = true; this.tB_status.Name = "TB_STATUS"; this.tb_status.size = new system.drawing.size (328, 80); this.tb_status.tabindex = 7; this.tb_status.text = ""; /// Notifyicon1 // this.notifyicon1 .ContextMenu = this.contextMenu1; this.notifyicon1.icon = ("NOTINICON1.ICON")))); this.notifyicon1.text = "Mail Detection"; this.notifyicon1. Visible = true; // // contextMenu1 // this.contextMenu1.MenuItems.addrange (new system.windows.forms.Menuitem [] {this.Menuitem1, this.Menuitem2, this.Menuitem3}); ////////////////// Menuitem1 / / This.Menuitem1.index = 0; this.Menuitem1.text = "Setting & S"; This.Menuitem1.click = new system.eventhandler (this.Menuitem1_click); /// Menuitem2 // this.Menuitem2.index = 1; this.Menuitem2.text = "-"; /// Menuitem3 // this .menuitem3.index = 2; this.Menuitem3.text = "Exit & Q"; this.Menuitem3.click = new system.eventhandler (this.Menuitem3_click); // // button2 // this.button2.location = new System .Drawing.point (48, 176); this.button2.name = "button2"; this.button2.tabindex = 8; this.button2.text = "minimize"; this.button2.click =

New system.eventhandler (this.button2_click); // // Timer1 // this.timer1.interval = 5000; this.timer1.tick = new system.eventhandler (this.timer1_thing); // // TB_Mins // this .tb_mins.location = new system.drawing.point (112, 124); this.tb_mins.name = "tb_mins"; this.tb_mins.size = new system.drawing.size (144, 21); this.tb_mins.tabindex = 10; this.tb_mins.text = "20000"; this.tb_mins.textchanged = new system.EventHandler (this.tb_pwd_textchanged); // // Label4 // this.label4.location = new system.drawing.point ( 32, 128); this.label4.name = "label4"; this.label4.size = new system.drawing.size (72, 23); this.label4.tabindex = 9; this.label4.text = time interval : "; /// Label5 // this.label5.Location = new system.drawing.point (264, 129); this.label5.name =" label5 "; this.label5.size = new system.drawing.size (40, 16); this.label5.tabindex = 11; this.label5.text = "ms"; // // button3 // this.button3.Location = new system.dra WING.POINT (264, 176); this.button3.name = "button3"; this.button3.tabindex = 12; this.button3.text = "Apply"; this.button3.click = new system.eventhandler (this .button3_click; // // CB_AUTORUN // this.cb_autorun.location = new system.drawing.point (112, 152); this.cb_autorun.name = "cb_autorun"; this.cb_autorun.size = new system.drawing. Size (160, 24); this.cb_autorun.tabindex = 13; this.cb_autorun.text = "Automated execution when starting"; // // Winform // this.autoscalebasesize = new system.drawing.size (6, 14) ;

THISTEM.DRAWING.SIZE (368, 301); this.Controls.add (this.cb_autorun); this.controls.add (this.button3); this.controls.add (this.label5); this .Controls.add (this.tb_mins); this.controls.add (this.label4); this.controls.add (this.button2); this.controls.add (this.tb_status); this.controls.add (this .tb_pwd); this.controls.add (this.tb_user); this.controls.add (this.tb_server); this.controls.add (this.label3); this.controls.add (this.label2); this. Controls.add (this.label1); this.controls.add (this.button1); this.icon = (resources.drawing.icon) ("$ this.icon")); this.maximizebox = False; this.name = "winform"; this.StartPosition = system.windows.forms.formstartPosition.centerscreen; this.text = "THISLOAD = New System.EventHandler (this.winform_load); this .Activated = new system.eventhandler (this.winform_activated); this.ResumeLayout (false);} #ENDREGON / /

/// the main entry point for the application . /// [statism] static void main () {Application.Run (new winform ());} private void button1_click (object sender, system.eventargs e) {string str_server; if ((TB_Server.Text ! = "" "&& (tb_user.text! =") && (tb_pwd.text! = ")) {TCPClient TCPC = New TcpClient (TB_Server.Text, 110); Byte [] Outbytes; String Input; NetworkStream NS = Null; try {ns = tcpc.getStream (); streamreader sr = new streamreader (ns); tb_status.text = sr.readline (); input = "user" tb_usetes "/ r / n"; Outbytes =

System.Text.Encoding.ascii.getbytes (INPUT.TOCHARRAY ()); ns.write (outbytes, 0, outbytes.length) TB_STATUS.TEXT = TB_STATUS.TEXT "/ R / N" sr.readLine (); input = "Pass" TB_PWD.Text "/ r / n"; outbytes = system.text.Encoding.ascii.getbytes; ns.write (outbytes, 0, outbytes.length) TB_STATUS.TEXT = TB_STATUS.TEXT "/ R / N" sr.readline (); input = "stat" "/ r / n"; outbytes = system.text.Encoding.ASCII.GetBytes (INPUT.TOCHARARRAY ()); NS .Write (outbytes, 0, outbytes.length) str_server = sr.readline (); str_num = ""; if (str_server.startswith (" OK")) {str_num = str_server.split ('') [1]; } Else str_num = ""; tb_status.text = tb_status.text "/ r / n" str_server; input = "quit" "/ r / n"; outbytes = system.text.Encoding.ascii.getbytes (Input) (INPUT). Tochararray (); ns.write (outbytes, 0, outbytes.length) TB_STATUS.TEXT = Tb_status.text "/ r / n" sr.readline ();} catch (invalidoperationException IoE) {tb_status.text = "could NOT Connect to Mail Server "; IF (str_num! = "") {Winform1 Form = New Winform1 (); form.str_num = str_num; form.scrollShow ();}}}}}}} private void winform_Activated (Object sender, system.eventargs e) {if (f_open) { this.Hide (); f_open = false;}} private void menuItem3_Click (object sender, System.EventArgs e) {this.Close ();} private void menuItem1_Click (object sender, System.EventArgs e) {this.Show () ..Focus ();

} Private void button2_Click (object sender, System.EventArgs e) {this.Hide ();} private void timer1_Tick (object sender, System.EventArgs e) {button1_Click (sender, e);} private void tB_pwd_TextChanged (object sender, System .Eventargs e) {time1.enabled = false; if ((tb_server.text! = ") && (TB_USER.TEXT! =") && (TB_PWD.Text! = ")) {Timer1.interval = System. Convert.ToInt32 (tB_mins.Text); timer1.Enabled = true;} else {timer1.Enabled = false;}} private void button3_Click (object sender, System.EventArgs e) {RegistryKey rk; Registry.CurrentUser.CreateSubKey ( "Software // YOUSOFT "); rk = registry.currentuser.opensubkey (" Software // YOUSOFT ", TRUE); RK.SetValue (" Server ", TB_Server.Text); RK.SetValue (" User ", TB_USER.TEXT); RK.SetValue ("PWD", TB_PWD.TEXT); RK.SETVALUE ("Interval", TB_Mins.text); if (cb_autorun.checked) {rk = registry.currentuser.opensubkey ("Software // Microsoft // Windows / / Currentversion //run ", true); r k.Setvalue ( "chkmail", Application.ExecutablePath);} else {rk = Registry.CurrentUser.OpenSubKey ( "Software // Microsoft // Windows // CurrentVersion // Run", true); rk.Deletevalue ( "chkmail" );} rk.Close ();} private void WinForm_Load (object sender, System.EventArgs e) {RegistryKey rk; rk = Registry.CurrentUser.OpenSubKey ( "Software // yousoft", false); object srv = rk.Getvalue ("Server"); if (srv! = null) TB_SERVER.TEXT = SRV.TOSTRING (); Object usr = rk.getValue ("User"); if (usr! = null) TB_USER.TEXT = usr.tostring );

Object PWD = RK.GetValue ("PWD"); if (PWD! = null) TB_PWD.TEXT = PWD.TOString (); Object Mins = RK.GetValue ("Interval); if (mins! = null) TB_Mins. TEXT = mins.tostring (); rk.close ();}}} Press F9 compiler and run. As shown in the figure: [related map]

[Related map]

[Related map]

four. Summary: This article introduces the reader how to use Borland C # Builder to monitor monitoring of POP3 mailbox, where a large number of network programming of the Windows Forms programming and .NET framework uses. Through this article, it is hoped that the reader has a sense of sensibility to Borland C # Builder in .NET, while the Windows Forms programming and the network programming have a general understanding. If you are interested, you can go online (URL:

Http://yousoft.hi.com.cn

Download all source code or communicate with myself. Download the source code:

[ click to download ]

转载请注明原文地址:https://www.9cbs.com/read-2718.html

New Post(0)