在 Visual Studio 2005 中将旧代码从 System.Web.Mail 更新为 System.Net.Mail:发送电子邮件时出现问题

Dor*_*yuX 5 .net vb.net email visual-studio-2005 .net-2.0

使用过时的 System.Web.Mail 发送电子邮件工作正常,这是代码片段:

 Public Shared Sub send(ByVal recipent As String, ByVal from As String, ByVal subject As String, ByVal body As String)
        Try
            Dim Message As System.Web.Mail.MailMessage = New System.Web.Mail.MailMessage
            Message.To = recipent
            Message.From = from
            Message.Subject = subject
            Message.Body = body
            Message.BodyFormat = MailFormat.Html
            Try
                SmtpMail.SmtpServer = MAIL_SERVER
                SmtpMail.Send(Message)
            Catch ehttp As System.Web.HttpException
                critical_error("Email sending failed, reason: " + ehttp.ToString)
            End Try
        Catch e As System.Exception
            critical_error(e, "send() in Util_Email")
        End Try
    End Sub
Run Code Online (Sandbox Code Playgroud)

这是更新的版本:

Dim mailMessage As New System.Net.Mail.MailMessage()

        mailMessage.From = New System.Net.Mail.MailAddress(from)
        mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))

        mailMessage.Subject = subject
        mailMessage.Body = body

        mailMessage.IsBodyHtml = True
        mailMessage.Priority = System.Net.Mail.MailPriority.Normal

        Try

            Dim smtp As New Net.Mail.SmtpClient(MAIL_SERVER)
            smtp.Send(mailMessage)

        Catch ex As Exception

            MsgBox(ex.ToString)

        End Try
Run Code Online (Sandbox Code Playgroud)

我尝试了许多不同的变体,但似乎没有任何效果,我觉得这可能与 SmtpClient 有关,这些版本之间的底层代码是否发生了变化?

没有被抛出的异常。

Rob*_*nto 0

我已经测试了您的代码,并且我的邮件已成功发送。假设您对旧代码使用相同的参数,我建议您的邮件服务器(MAIL_SERVER)正在接受该邮件,并且处理有延迟,或者它认为它是垃圾邮件并丢弃它。

我建议使用第三种方式发送消息(如果你勇敢的话,可以使用telnet),看看是否成功。

编辑:我注意到(从您随后的回答中)指定端口有一定帮助。您没有说明您是否使用端口 25 (SMTP) 或端口 587(提交)或其他端口。如果您还没有这样做,使用提交端口也可能有助于解决您的问题。

维基百科rfc4409有更多详细信息。