The verification of email address validity is a common problem! The general check method is to perform a simple format check on the email address string, such as whether it contains valid characters such. This method can only ensure that the address looks valid in the format, and cannot guarantee that the address can be reached. Recently, a large number of address verification tasks have been carried out, and a small program has been written to check whether the email address is truly reachable.
The email address consists of the user name and email server. Therefore, the verification email address can be divided into two steps: first, check the email server and then check the user name. For example, the brookes_luan@yahoo.com.cn first checks whether the yahoo.com.cn Server is a valid email server, and then checks whether the brookes_luan user exists on the server.
Query the DNS server and obtain the MX (Mail exchanger) Record of the domain name to determine whether the email server corresponding to a domain name is valid. In Windows, you can use the NSLookup program to view this record.
// Use the NSLookup program to query MX records and obtain the mail server corresponding to the domain name
Public String getmailserver (string stremail)
{
String strdomain = stremail. Split ('@') [1];
Processstartinfo info = new processstartinfo ();
Info. useshellexecute = false;
Info. redirectstandardinput = true;
Info. redirectstandardoutput = true;
Info. filename = "NSlookup ";
Info. createnowindow = true;
Info. Arguments = "-type = Mx" + strdomain;
Process NS = process. Start (Info );
Streamreader sout = NS. standardoutput;
RegEx Reg = new RegEx ("mail exchanger = (? <MailServer> [^ // s] + )");
String strresponse = "";
While (strresponse = sout. Readline ())! = NULL ){
Match amatch = reg. Match (strresponse );
If (Reg. Match (strresponse). Success) return amatch. Groups ["MailServer"]. value;
}
Return NULL;
}
Step 2: connect to the email server and check whether the server availability and users exist
Public int checkemail (string mailaddress)
{
RegEx Reg = new RegEx ("^ [a-zA-Z0-9 _-] + @ ([a-zA-Z0-9-] + //.) {1 ,}( com | net | Edu | Miz | biz | CN | CC) $ ");
If (! Reg. ismatch (mailaddress) return 405; // the email address format is incorrect.
String MailServer = getmailserver (mailaddress );
If (MailServer = NULL)
{
Return 404; // email server Detection Error
}
Tcpclient TCPC = new tcpclient ();
TCPC. nodelay = true;
TCPC. receivetimeout = 3000;
TCPC. sendtimeout = 3000;
Try {
TCPC. Connect (MailServer, 25 );
Networkstream S = TCPC. getstream ();
Streamreader sr = new streamreader (S, encoding. Default );
Streamwriter Sw = new streamwriter (S, encoding. Default );
String strresponse = "";
String strtestfrom = "brookes_luan@yahoo.com.cn ";
Sw. writeline ("HELO" + MailServer );
Sw. writeline ("mail from: <" + mailaddress + "> ");
Sw. writeline ("rcpt to: <" + strtestfrom + "> ");
Strresponse = Sr. Readline ();
If (! Strresponse. startswith ("2") return 403; // incorrect user name
Sw. writeline ("quit ");
Return 200; // check the email address
} Catch (exception ee)
{
Return 403; // an error occurs or the email server is inaccessible.
}
}
This program is implemented based on the basic process of SMTP. The basic process of connecting to an email server may be as follows:
Telnet mail.brookes.com 25
> 220 brookes.com <IMail 8.02>
Helo
> 250 mail.brookes.com
Mail from: brookes@tsinghua.org.cn
> 250 OK
Rcpt to: me@brookes.com
> 250 OK its for me@brookes.com
Data
> OK. Send it; end with <CRLF>. <CRLF>
Soem data.
> 250 message queued
Quit
> 221 goodbye.
The gray part of the code is a conventional email address check method that checks the validity of the address form.
The program uses the system. Io, system. net. sockets, system. Diagnostics namespace, and calls it through checkmail (mailaddress.
Note:
1. This method can further check the validity of the email address, which is much more advanced than formal verification. For applications that require verification of registration information and password sending through an email address, this can be further ensured;
2. Due to the diversity and configurability of the email server, the sub-program cannot guarantee the general application of the results;
3. Some large mail servers usually have strong anti-spam functions, which may respond to such detection, so it is not suitable for a large number of address detection. For example, during the probe process, I found that the 163.com server stopped responding to the request.