Kód:
public class EmailTester
{
public EmailTester()
{
}
private string GetData(NetworkStream oStream)
{
byte[] bResponse = new byte[1024];
string sResponse = "";
int lenStream = oStream.Read(bResponse, 0, 1024);
if (lenStream > 0)
{
sResponse = Encoding.ASCII.GetString(bResponse, 0, 1024);
}
return sResponse;
}
private string SendData(NetworkStream oStream, string sToSend)
{
byte[] bArray = Encoding.ASCII.GetBytes(sToSend.ToCharArray(), 0, 1024);
oStream.Write(bArray, 0, bArray.Length);
return GetData(oStream);
}
private bool ValidResponse(string sResult)
{
bool bResult = false;
if (sResult.Length>1)
{
if (Convert.ToInt32(sResult.Substring(0, 1)) < 3) {
bResult = true;
}
}
return bResult;
}
private string TalkToServer(NetworkStream oStream, string sToSend)
{
return SendData(oStream, sToSend);
}
private string NSLookup(string sDomain)
{
Process ns = new Process();
ns.StartInfo.UseShellExecute = false;
ns.StartInfo.RedirectStandardInput = true;
ns.StartInfo.RedirectStandardOutput = true;
ns.StartInfo.FileName = "nslookup";
ns.StartInfo.Arguments = "-type=MX " + sDomain.ToUpper().Trim();
ns.Start();
StreamReader sout = ns.StandardOutput;
Regex reg = new Regex("mail exchanger = (?<server>[^\\\\s]+)");
string mailserver = "";
do
{
Match amatch = reg.Match(sout.ReadLine());
if (amatch.Success)
{
mailserver = amatch.Groups["server"].Value;
break;
}
} while (sout.Peek() > -1);
return mailserver;
}
private Int16 ChatMailServer(string sEmail)
{
NetworkStream oStream;
string sFrom;
string sTo;
string sResponse;
string Remote_Addr;
string mserver;
string[] sText;
sTo = "<" + sEmail + ">";
sText = sEmail.Split('@');
mserver = NSLookup(sText[1]);
if (mserver == "")
{
return 4;
}
Remote_Addr = "index.com";
sFrom = "<myIP@" + Remote_Addr + ">";
using (TcpClient oConnection = new TcpClient()) {
try {
oConnection.SendTimeout = 10000;
oConnection.Connect(mserver, 25);
oStream = oConnection.GetStream();
sResponse = GetData(oStream);
sResponse = TalkToServer(oStream, "HELO " + Remote_Addr + System.Environment.NewLine);
sResponse = TalkToServer(oStream, "MAIL FROM: " + sFrom + System.Environment.NewLine);
if (ValidResponse(sResponse))
{
sResponse = TalkToServer(oStream, "RCPT TO: " + sTo + System.Environment.NewLine);
if (ValidResponse(sResponse))
{
return 1;
}
else
{
return 2;
}
}
TalkToServer(oStream, "QUIT" + System.Environment.NewLine);
oConnection.Close();
oStream.Dispose();
return 3;
}
catch (Exception ex)
{
return 3;
}
}
}
public string isEmail(string sEmail)
{
try {
sEmail = sEmail.Trim();
Regex re = new Regex("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
if (re.IsMatch(sEmail))
{
return ChatMailServer(sEmail).ToString();
}
else
{
return "5";
}
}
catch (Exception ex)
{
//return ex.ToString();
return 6;
}
}
}
de van 1 kis problémám vele, én winserver2008-at használok a laptopomon oprendszerként, és nemigazán akaródzik az nslookup futtatása, úgyhogy nem tudtam kipróbálni a kódot, anno vb-ben futott, igaz, kicsit át kellett írnom pár dolgot, a c# konvertálás közben.
ha vki kipróbálja, várom a fejleményeket
Könyvjelzők