我看过一些关于如何ping收件箱(不向其发送任何邮件)的php示例,以检查它是否存在.我想知道是否有人知道这是否可能与.net?如果我打算写一个应用程序来批量检查我通过我的网站捕获的电子邮件列表.
Ben*_*igt 45
SMTP VRFY为此定义了命令,但由于垃圾邮件发送者的滥用完全淹没了合法使用的数量,因此世界上几乎每个电子邮件服务器都被配置为撒谎.
如果你写"查收邮件",你的意思是什么?如果没有为电子邮件所有者发送一些唯一链接,则无法检查此信息,您只能检查电子邮件的语法以及与smtp的连接.
public static bool isEmail(string inputEmail)
{
inputEmail = NulltoString(inputEmail);
string strRegex = @"^([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})(\]?)$";
Regex re = new Regex(strRegex);
if (re.IsMatch(inputEmail))
return (true);
else
return (false);
}
Run Code Online (Sandbox Code Playgroud)
smtp检查
string[] host = (address.Split('@'));
string hostname = host[1];
IPHostEntry IPhst = Dns.Resolve(hostname);
IPEndPoint endPt = new IPEndPoint(IPhst.AddressList[0], 25);
Socket s= new Socket(endPt.AddressFamily,
SocketType.Stream,ProtocolType.Tcp);
s.Connect(endPt);
Run Code Online (Sandbox Code Playgroud)
\xe2\x80\x8b\n1. 使用以下命令获取电子邮件提供商的 MX 记录:
\n\nnslookup -type=mx gmail.com\nRun Code Online (Sandbox Code Playgroud)\n\n调用 tcp 客户端检查电子邮件是否有效:
\n\nprivate static void Main(string[] args)\n{ \n var gMail = IsEmailAccountValid("gmail-smtp-in.l.google.com", "aa.aa@gmail.com");\n Console.WriteLine($"Gmail account is valid - {gMail.ToString()}");\n\n var live = IsEmailAccountValid("live-com.olc.protection.outlook.com", "aa.aa@live.com");\n Console.WriteLine($"Live account is valid - {live.ToString()}");\n}\n\nprivate static byte[] BytesFromString(string str)\n{\n return Encoding.ASCII.GetBytes(str);\n}\n\nprivate static int GetResponseCode(string ResponseString)\n{\n return int.Parse(ResponseString.Substring(0, 3));\n}\n\nprivate static bool IsEmailAccountValid(string tcpClient, string emailAddress)\n{\n TcpClient tClient = new TcpClient(tcpClient, 25);\n string CRLF = "\\r\\n";\n byte[] dataBuffer;\n string ResponseString;\n NetworkStream netStream = tClient.GetStream();\n StreamReader reader = new StreamReader(netStream);\n ResponseString = reader.ReadLine();\n\n /* Perform HELO to SMTP Server and get Response */\n dataBuffer = BytesFromString("HELO Hi" + CRLF);\n netStream.Write(dataBuffer, 0, dataBuffer.Length);\n ResponseString = reader.ReadLine();\n dataBuffer = BytesFromString("MAIL FROM:<YourGmailIDHere@gmail.com>" + CRLF);\n netStream.Write(dataBuffer, 0, dataBuffer.Length);\n ResponseString = reader.ReadLine();\n\n /* Read Response of the RCPT TO Message to know from google if it exist or not */\n dataBuffer = BytesFromString($"RCPT TO:<{emailAddress}>" + CRLF);\n netStream.Write(dataBuffer, 0, dataBuffer.Length);\n ResponseString = reader.ReadLine();\n var responseCode = GetResponseCode(ResponseString);\n\n if (responseCode == 550)\n {\n return false;\n }\n\n /* QUITE CONNECTION */\n dataBuffer = BytesFromString("QUITE" + CRLF);\n netStream.Write(dataBuffer, 0, dataBuffer.Length);\n tClient.Close();\n return true;\n}\nRun Code Online (Sandbox Code Playgroud)MX记录可以通过代码获取:
\n\nvar lookup = new LookupClient();\nvar result = lookup.QueryAsync("gmail.com", QueryType.ANY).Result;\nvar domainName = result.Additionals[result.Additionals.Count - 1].DomainName.Value;\nRun Code Online (Sandbox Code Playgroud)\n\n使用上面的代码找到 MX 查找并使用该 MX 查找来检查电子邮件是否有效。
\n\n\xe2\x80\x8b
\n