Как узнать домен плохо перед вызовом SmtpClient.Send ()? - PullRequest
3 голосов
/ 06 марта 2010

У меня есть код, который отправляет электронные письма пользователям со страницы регистрации. Время от времени пользователи вводят неверный адрес электронной почты, и в результате получается неверный домен.

Я хотел бы иметь возможность проверить, не является ли домен плохим, ДО вызова метода System.Net.Mail.SmtpClient.Send (), поскольку это приведет к улучшению работы пользователя. Я думаю, что использование AJAX, чтобы сразу сказать пользователю, что его электронное письмо не будет отправлено без необходимости программно отправлять электронное письмо, прежде чем обнаруживать, что это плохо, гораздо более элегантно.

В настоящее время я прекрасно справляюсь с ошибкой, поэтому, пожалуйста, не обсуждайте, как обрабатывать ошибки. Я получаю ошибку: «Почтовый ящик недоступен. Ответ сервера: :: Адрес получателя отклонен: Домен не найден»

Кто-нибудь знает, как использовать аналогичный (или точно такой же) код для проверки, является ли домен плохим или нет, перед вызовом метода Send ()?

Ответы [ 4 ]

3 голосов
/ 06 марта 2010

Самый надежный способ убедиться, что почтовый сервер действительно настроен для данного домена, - запросить запись MX для этого домена.

2 голосов
/ 06 марта 2010

Попробуйте что-то вроде этого:

string email = "person@domain.com"
MailAddress ma = new MailAddress(email); // Throws exception if email address is incorrectly formatted
System.Net.Dns.GetHostEntry(ma.Host); // Throws exception if host is invalid
1 голос
/ 06 марта 2010

Вот хорошая статья об этом: http://www.codeproject.com/KB/validation/Valid_Email_Addresses.aspx

По своему опыту я просто использую валидатор регулярных выражений для проверки формата и использую тип подтверждения системы, чтобы убедиться, что это действительный адрес.

ОБНОВЛЕНИЕ: Эта статья старая, поэтому я бы проверил, чтобы она не устарела.

0 голосов
/ 06 марта 2010

Возможно, используйте System.Net.Dns.GetHostByName(hostname) и определите, вернется ли он с чем-то верным?

Хотя MSDN говорит мне, что этот метод устарел ...

Может быть System.Net.Dns.GetHostEntry(hostname) это его предшественник?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...