在Exchange服务器上验证电子邮件地址

3

我正在允许用户管理存储在数据库中的分发列表。用户只能输入@mydomain.com的电子邮件地址。然后,基于Web的应用程序获取分发列表并发送电子邮件。我希望在从应用程序发送电子邮件之前验证电子邮件是否有效。

为了发送电子邮件,我正在使用以下代码:

    Dim SendTo As String = "ThisIsNotARealEmailAddress@mydomain.com"
    Dim SentFrom As String = "me@mydomain.com"
    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 <ThisIsNotARealEmailAddress@mydomain.com>... User unknown

在将电子邮件地址添加到数据库时,是否有任何方法可以验证电子邮件地址,而不是在发送电子邮件时使用try catch块?


1
当电子邮件地址被添加时,您可以对AD域进行查询。这方面应该有很多例子。但是,除非管理员也更新数据库,否则在电子邮件地址更改或删除时仍会出现错误。 - Bill
@Bill ~ 我没有考虑到电子邮件地址更改或被删除的情况。我会在提交时尽职调查以获取有效的AD电子邮件,然后在发送时捕获错误。谢谢。 - zeroef
1个回答

2

用户只向您的域发送电子邮件?而且您控制该域?这是一个Windows域吗?只需查询AD并从AD获取其电子邮件地址,而无需询问他们。这样做是否有效?我假设这是一个Windows应用程序,而不是Web应用程序。


我考虑过针对Active Directory验证电子邮件。我不是邮件服务器专家,所以让我问一下:如果我针对AD进行验证,是否会出现邮箱存在于邮件服务器上但没有AD记录的情况? - zeroef
@zeroef ~ 在Exchange上有许多不存在于AD中的邮箱,但问题在于,如果它们不在AD中,就无法访问域,因此无法登录Exchange。此外,通过我的方法,您无需要求他们提供电子邮件地址,您只需从LDAP中获取即可。如果AD账户中不存在电子邮件地址,那么再提示用户输入电子邮件地址。 - jcolebrand
@drachenstern - 我明白我们的分歧了。我没有问题从当前登录的用户中获取电子邮件地址。我的问题是一个用户输入多个其他用户的电子邮件地址。 - zeroef
@zeroef ~ 哦,那样的话,只需对键入的内容进行AD验证即可。是的,您可以假设活动电子邮件地址将在那里。或者,只需发送电子邮件并观察退回情况,这是唯一其他经过验证的方法。 - jcolebrand
@drachenstern - 当添加到分发列表时发送确认消息可以一举两得。它可以验证电子邮件是否有效,并为用户提供“取消订阅”分发的选项。 - zeroef
@zeroef 因此这就是为什么它更受欢迎的原因。 - jcolebrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接