Подтвердить адрес электронной почты на сервере обмена

Я разрешаю пользователям управлять списком рассылки, хранящимся в базе данных. Пользователям разрешено вводить только адреса электронной почты @mydomain.com. Затем веб-приложение берет список рассылки и отправляет электронные письма. Я хотел бы убедиться, что электронная почта действительна, прежде чем отправлять электронную почту из приложения.

Чтобы отправить электронное письмо, я использую этот код:

    Dim SendTo As String = "[email protected]"
    Dim SentFrom As String = "[email protected]"
    Dim MessageBody As String = "blah blah blah"
    Dim MessageSubject As String = "This is the subject"


    Dim mm As New MailMessage(SentFrom, SendTo)
    mm.Subject = MessageSubject
    mm.IsBodyHtml = False
    mm.Priority = MailPriority.High
    mm.Body = MessageBody

    Dim smtp As New SmtpClient()
    smtp.Send(mm)

Если SendTo не является действительным адресом электронной почты, сервер возвращает эту ошибку:

Mailbox unavailable. The server response was: 5.1.1 <[email protected]>... User unknown

Можно ли как-то проверить электронную почту, когда адрес электронной почты добавляется в базу данных, вместо блока try catch при отправке электронной почты?


person zeroef    schedule 09.11.2010    source источник
comment
Вы можете выполнить запрос к домену AD при добавлении адресов электронной почты. Там должно быть много примеров. Но у вас все еще будут ошибки при изменении или уничтожении адресов электронной почты, если только ваши администраторы не обновят вашу базу данных.   -  person Bill    schedule 09.11.2010
comment
@Bill ~ Я не учел, когда адреса электронной почты меняются или удаляются. Я просто приложу все усилия, чтобы получить действительное электронное письмо от AD при отправке, а затем поймать ошибки при отправке. Спасибо   -  person zeroef    schedule 09.11.2010


Ответы (1)


Пользователи отправляют только на ваш домен? И вы управляете доменом? И это домен Windows? Просто запросите объявление и получите их адрес электронной почты из объявления, не спрашивая их. Будет ли это действительным? Я предполагаю, что это приложение Windows, а не веб-приложение.

person jcolebrand    schedule 09.11.2010
comment
Я подумал о проверке электронной почты в Active Directory. Я не специалист по почтовому серверу, поэтому позвольте мне задать следующий вопрос: если я проверю по AD, возникнет ли когда-нибудь случай, когда почтовый ящик существует на почтовом сервере, но не имеет записи AD? - person zeroef; 09.11.2010
comment
@zeroef ~ на Exchange есть множество почтовых ящиков, которых нет в AD, но вот в чем загвоздка. Они не могут попасть в домен, если они не в AD, поэтому они не могут войти в Exchange. Кроме того, по моему методу вы не спрашиваете у них адрес электронной почты, вы просто выдумываете его из LDAP. Если в учетной записи AD ничего не существует, ТОГДА вы запрашиваете адрес электронной почты. - person jcolebrand; 09.11.2010
comment
@drachenstern - я вижу наш разрыв. У меня нет проблем с извлечением адреса электронной почты текущего пользователя, вошедшего в систему. У меня есть один пользователь, вводящий несколько адресов электронной почты других пользователей. - person zeroef; 09.11.2010
comment
@zeroef ~ ну, в таком случае, просто проверьте, что введено в AD. Да, вы можете предположить, что активный адрес электронной почты будет там. В качестве альтернативы, просто отправьте им электронное письмо и следите за возвратами, это единственный другой проверенный способ. - person jcolebrand; 09.11.2010
comment
@drachenstern — отправка подтверждающего сообщения при добавлении в список рассылки может убить двух зайцев одним выстрелом. Он может подтвердить, что электронная почта действительна, а также дать пользователю возможность отказаться от подписки на дистрибутив. - person zeroef; 09.11.2010
comment
@zeroef, следовательно, причина, по которой он предпочтительнее. - person jcolebrand; 09.11.2010