我正在尝试更新一些使用现已声明的过时 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 类中,但其中的信息没有似乎与我在这里有任何相似之处。
我几乎可以肯定我在这里犯了一些明显的错误,但是我看不到它。有人可以告诉我应该做什么吗?
答案 0 :(得分:3)
您已经注意到System.Web.Mail
和System.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
的很好的例子。
您还可以在SmtpClient
或web.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没有关闭它。
将此问题作为一个无答案,表明问题已得到解决,即使问题从未解决过......