.net 如何在使用SmtpClient和MailMessage时抑制电子邮件验证

.net 如何在使用SmtpClient和MailMessage时抑制电子邮件验证,.net,validation,email,smtpclient,mailmessage,.net,Validation,Email,Smtpclient,Mailmessage,当使用SmtpClient和邮件消息(.net 3.5)发送电子邮件时,“收件人”电子邮件地址在发送前得到验证。我有一大堆电子邮件地址,在at标志前有一个点(.),当您尝试使用SmtpClient发送消息时,会导致格式异常。这实际上是一件好事,因为根据规范,at符号前的一个点是无效的。不幸的是,这些电子邮件存在于现实世界中,如果您使用首选的电子邮件客户端发送它们,它们就会被发送出去 我的问题是,通过SmtpClient/MailMessage的电子邮件验证可以被禁止吗?编辑:在VB2005中尝试

当使用SmtpClient和邮件消息(.net 3.5)发送电子邮件时,“收件人”电子邮件地址在发送前得到验证。我有一大堆电子邮件地址,在at标志前有一个点(.),当您尝试使用SmtpClient发送消息时,会导致格式异常。这实际上是一件好事,因为根据规范,at符号前的一个点是无效的。不幸的是,这些电子邮件存在于现实世界中,如果您使用首选的电子邮件客户端发送它们,它们就会被发送出去


我的问题是,通过SmtpClient/MailMessage的电子邮件验证可以被禁止吗?

编辑:在VB2005中尝试了示例代码,我也得到了异常。下面的代码在VB2010 Express中运行良好,但这似乎是一个现已修复的bug。MSDN引用自4.0文档,该片段不在MSDN页面的早期版本中

我现在无法尝试,但您的电子邮件地址的格式是什么?
maildaddress
类的文档说明它支持用户名中的连续点和尾随点。例如,user…name..@host。(引用自)

编辑:添加示例

Try
    Dim smtpClient As New SmtpClient()
    smtpClient.Host = "mailserver"
    Dim fromAddress As New MailAddress("from@test.com")
    Dim toAddresses As New MailAddress("test.test.@test.com")
    Using message As New MailMessage()
         message.From = fromAddress
         message.To.Add(toAddresses)

         message.IsBodyHtml = False
         message.Subject = "test"
         smtpClient.Send(message)
    End Using
    TextBox1.Text = "OK"
Catch ex As SmtpException
    TextBox1.Text = ex.ToString()
End Try

这可能是尝试发送电子邮件后出现的错误

您能否提供一些调用堆栈,以便我们可以查看引发异常的确切位置


更新: 根据reflector的反汇编代码,只有升级到VS2010和.NET 4.0才能解决此问题


System.Net assembly的较低版本无法解决此问题,这可能是文档中所述,但我刚刚对其进行了测试,它不允许使用
test.test.@test.com
@Barry:我现在设法尝试了,并且
SmtpClient
对该格式的地址没有问题。但是,实际的SMTP客户端拒绝该地址,因此引发异常,但这与
SmtpClient
无关,它只是传递错误。那么你确定这对你来说不一样吗?我在创建新邮件地址时遇到FormatException错误。我已经在C#&VB(VisualStudio2008)和@Barry:这里的相同情况下测试过了。我使用C#并得到一个FormatException。对不起。当尝试使用电子邮件地址(例如“test@example.com”)构造MailMessage对象时,会引发异常。@Matthias:请发布您正在使用的实际代码,正如我在回复Barry上述评论时所说的,我可以使用该格式的地址构造电子邮件。我将修改我的答案,以包含我使用的示例代码。@ho1:我的代码与你的代码大致相同。但是我使用C#,就像Barry和我在使用“test.test@test.com”构造MailAddress对象时遇到的格式异常一样。@ho1:如果您将MailAddress写入=新的MailAddress(“test.test@test.com”);在VS 2005或2008中,您应该会遇到异常。@Belousov Pavel:是的,正如我在修改后的答案中所写的那样,我也发现了这个问题。似乎您可能需要升级到2010年,在那里工作正常,但我在2005年遇到了异常(目前无法访问2008)。是的,这个问题在.NET 4中得到了修复。VS2008使用与2005相同的System.dll,并且具有相同的行为。我在DotNet4和2010中使用了这个