我可以使用.net检查是否存在电子邮件地址吗?

phi*_*owe 25 .net c# email

我看过一些关于如何ping收件箱(不向其发送任何邮件)的php示例,以检查它是否存在.我想知道是否有人知道这是否可能与.net?如果我打算写一个应用程序来批量检查我通过我的网站捕获的电子邮件列表.

Ben*_*igt 45

SMTP VRFY为此定义了命令,但由于垃圾邮件发送者的滥用完全淹没了合法使用的数量,因此世界上几乎每个电子邮件服务器都被配置为撒谎.

  • +1用于解释为什么没有可靠的方法来做OP想要的事情.在个人方面,任何使批量电子邮件变得更难的事情无疑是一件好事. (4认同)

Svi*_*ack 9

如果你写"查收邮件",你的意思是什么?如果没有为电子邮件所有者发送一些唯一链接,则无法检查此信息,您只能检查电子邮件的语法以及与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)

  • `NulltoString`来自哪里? (2认同)

sle*_*ske 9

不,原则上不可能检查是否存在电子邮件 - 与语言无关.没有协议可以做到这一点.

有一些部分解决方案,但它们都不可靠.

请参阅如何检查电子邮件地址是否存在而不发送电子邮件?详情.


Nik*_*eel 6

\xe2\x80\x8b\n1. 使用以下命令获取电子邮件提供商的 MX 记录:

\n\n
nslookup -type=mx gmail.com\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  1. 调用 tcp 客户端检查电子邮件是否有效:

    \n\n
    private 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}\n
    Run Code Online (Sandbox Code Playgroud)
  2. \n
\n\n

MX记录可以通过代码获取:

\n\n
var lookup = new LookupClient();\nvar result = lookup.QueryAsync("gmail.com", QueryType.ANY).Result;\nvar domainName = result.Additionals[result.Additionals.Count - 1].DomainName.Value;\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用上面的代码找到 MX 查找并使用该 MX 查找来检查电子邮件是否有效。

\n\n

\xe2\x80\x8b

\n