2011-01-31 17 views
0

我試圖更新一些使用現在宣佈已過時的舊版軟件System.Web.Mail類。不幸的是,我真的不知道很多關於電子郵件的知識,所以我在尋找建議。從Web.Mail移動到Net.Mail,替換MailMessage.Fields?

這裏是代碼我期待在修改片段:

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) 

從我可以告訴,這應該是配置某種發送選項。我可以種工作發生了什麼事情,但我不知道我應該怎麼去重新實現它...

尋找喜歡的地方將要放這個東西現在在系統.Net.Mail.SmtpClient.Credentials class,但其中的信息似乎與我在此處的內容沒有任何相似之處。

我幾乎可以肯定我在這裏做了一些明顯的錯誤,但我看不到它。有人能告訴我我應該做什麼

+0

只注意到了cdoNTLM,你在現有的代碼發送用戶名/密碼? – Kev 2011-01-31 12:14:34

+0

cdoNTLM = 2,顯然。我看不到任何有關用戶名正在發送的證據。令我困惑的是,我能夠發送的證書與上面添加的字段不一致,但我無法看到其他任何地方這樣做。 – Frosty840 2011-01-31 12:29:04

+0

這是您要發送郵件的交換服務器嗎?如果是這樣的版本? – Kev 2011-01-31 12:33:53

回答

0

我不知道這裏實際發生了什麼,它看起來像這個函數從來沒有被使用過。該程序確實發送郵件,但不會通過此功能發送。整個計劃是一團糟,從一堆外部圖書館中拉出來。

我剛剛發表了所有導致錯誤的註釋,並且做了一個註釋,試圖在找到時間時撕掉整個圖書館。

我已經關閉了這個問題,但它不會讓我,並且在我標記它之後,mods沒有關閉它。

把這個作爲一個非回答說,這個問題得以解決,即使是從來沒有解決的問題......

3

正如您已經注意到System.Web.MailSystem.Net.Mail之間有一些差異。

這裏有一個工作示例:

Imports System.Net.Mail 

Module Module1 

    Sub Main() 
    Dim myMessage As New MailMessage 
    myMessage.To.Add(New MailAddress("[email protected]", "Bob")) 
    myMessage.From = _ 
    New MailAddress("[email protected]", "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很好的例子。

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

在你的代碼只希望這樣做,而不是:

你也可以在你的web.configapp.config文件配置SmtpClient設置

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)