Я видел некоторые php-примеры того, как вы можете пинговать почтовый ящик (без отправки ему почты), чтобы проверить, существует ли он. Мне было интересно, знает ли кто-нибудь, возможно ли это с .net? Если я собираюсь написать приложение, чтобы выполнить массовую проверку в списке писем, которые я просмотрел на своем сайте.
Могу ли я проверить, существует ли почтовый адрес с использованием .net?
Ответ 1
SMTP определяет команду VRFY
для этого, но поскольку злоупотребление со стороны спамеров полностью переполняет количество законных целей, практически каждый сервер электронной почты в мире настроен на ложь.
Ответ 2
Нет, в принципе невозможно проверить, существует ли электронная почта - независимо от языка. Для этого просто нет протокола.
Есть частичные решения, но ни один из них не является надежным.
См. Как проверить, существует ли почтовый адрес без отправки электронной почты? для получения более подробной информации.
Ответ 3
Что вы имеете в виду, если вы пишете "проверить электронную почту"? Не отправляя уникальную ссылку для владельца электронной почты, вы не можете проверить это, вы можете проверить только синтаксис электронной почты и подключение к 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);
}
smtp check
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);
Ответ 4
http://www.codicode.com/art/free_asp_net_email_validator_verifier.aspx. Используйте ссылку dll для вашего кода. Он бесплатный как для личного использования, так и для перераспределения. Он проверяет существование доменного имени, фактически не отправляя электронное письмо.
Ответ 5
Это не является надежным. Лучшее, что вы можете сделать, это проверить синтаксис и посмотреть, разрешено ли доменное имя.
Синтаксис электронной почты RegEx:
(?<username>#?[_a-zA-Z0-9-+]+(\.[_a-zA-Z0-9-+]+)*)@(?<domain>[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|arpa|asia|coop|info|jobs|mobi|museum|name|travel)))
Ответ 6
protected bool checkDNS(string host, string recType = "MX")
{
bool result = false;
try
{
using (Process proc = new Process())
{
proc.StartInfo.FileName = "nslookup";
proc.StartInfo.Arguments = string.Format("-type={0} {1}", recType, host);
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.ErrorDialog = false;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>
{
if ((e.Data != null) && (!result))
result = e.Data.StartsWith(host);
};
proc.ErrorDataReceived += (object sender, DataReceivedEventArgs e) =>
{
if (e.Data != null)
{
//read error output here, not sure what for?
}
};
proc.Start();
proc.BeginErrorReadLine();
proc.BeginOutputReadLine();
proc.WaitForExit(30000); //timeout after 30 seconds.
}
}
catch
{
result = false;
}
return result;
}