从Web.Mail迁移到Net.Mail,替换MailMessage.Fields?

时间:2011-01-31 11:25:58

标签: .net vb.net email

我正在尝试更新一些使用现已声明的过时 System.Web.Mail 类的旧软件。不幸的是,我真的不太了解电子邮件,所以我正在寻找建议。

以下是我正在修改的代码片段:

Dim myMessage As New Web.Mail.MailMessage
Dim cdoSendUsingPort As Integer = 2
Dim cdoNTLM As Integer = 2
myMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", Options.SMTPServer)
myMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25)
myMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", cdoSendUsingPort)
myMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", cdoNTLM)

据我所知,这应该是配置某种发送选项。我可以解决正在发生的事情,但我不知道应该如何重新实施它......

正在寻找就像放置这些内容的地方现在位于 System.Net.Mail.SmtpClient.Credentials 类中,但其中的信息没有似乎与我在这里有任何相似之处。

我几乎可以肯定我在这里犯了一些明显的错误,但是我看不到它。有人可以告诉我应该做什么吗?

4 个答案:

答案 0 :(得分:3)

您已经注意到System.Web.MailSystem.Net.Mail之间存在一些差异。

这是一个有效的例子:

Imports System.Net.Mail

Module Module1

  Sub Main()
    Dim myMessage As New MailMessage
    myMessage.To.Add(New MailAddress("bob@example.com", "Bob"))
    myMessage.From = _
     New MailAddress("noreply@mydomain.com", "MyDomain Senders Name")
    myMessage.Subject = "Test mail"
    myMessage.Body = "Hello world"

    Dim server As New SmtpClient
    server.Port = 25
    server.Host = "your server name"
    server.DeliveryMethod = SmtpDeliveryMethod.Network
    server.UseDefaultCredentials = True

    server.Send(myMessage)

  End Sub

End Module

有一个名为System.Net.Mail - Oh My的优秀资源,它提供了如何使用System.Net.Mail的很好的例子。

您还可以在SmtpClientweb.config文件中配置app.config设置:

<configuration>
    <system.net>
      <mailSettings>
        <smtp deliveryMethod="Network">
          <network defaultCredentials="true" host="your server name"/>
        </smtp>
      </mailSettings>
    </system.net>
</configuration>

在您的代码中,您只需执行此操作:

Dim server As New SmtpClient
server.Send(myMessage)

<强>更新

我刚刚注意到您正在使用NTLM身份验证。请尝试以下方法之一:

Dim server As New SmtpClient
server.Port = 25
server.Host = "your server name"
server.DeliveryMethod = SmtpDeliveryMethod.Network

''// If no username/password being send then try this:
server.Credentials = _
    CredentialCache.DefaultNetworkCredentials.GetCredential(_
        New Uri("smtp://yourserverfqname"), "NTLM")
''// or this
server.Credentials = _
    CredentialCache.DefaultCredentials.GetCredential(_
        New Uri("smtp://yourserverfqname"), "NTLM")
server.Send(myMessage)

答案 1 :(得分:1)

System.Net.Mail在应用程序的web.config / app.config中配置,请参阅scott gu的帖子:

http://weblogs.asp.net/scottgu/archive/2005/12/10/432854.aspx

还有一个关于如何发送邮件的C#指南,但这应该很容易移植到VB

编辑: VB端到端。 http://forums.asp.net/t/971802.aspx

答案 2 :(得分:1)

正如Beliskner所提到的,您可以在web.config文件中设置大多数相关属性。

您也可以通过SmtpClient实例设置它们。但是,如果您只能使用.config文件,那么这是一个更好的地方。

http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx

无论如何,你需要该实例用MailMessage调用.Send()。

答案 3 :(得分:0)

我不知道这里到底发生了什么,看起来这个函数从未使用过。该程序确实发送邮件,但它不通过此功能发送。整个程序是乱七八糟的,从一堆外部库中汇集起来。

我刚刚评论了导致错误的所有内容,并做了一个注释,以便在我找到时间时尝试撕掉整个库。

我会关闭这个问题,但它不会让我,并且在我标记它之后mod没有关闭它。

将此问题作为一个无答案,表明问题已得到解决,即使问题从未解决过......