Vb.net 在Yahoo和Hotmail上发送SMTP失败

Vb.net 在Yahoo和Hotmail上发送SMTP失败,vb.net,smtp,Vb.net,Smtp,我的SMTP代码可以在gmail上运行,但当我在Yahoo和Hotmail上尝试时,总是失败。我已经输入了正确的服务器和端口,但它仍然不允许我发送。我真的很困惑我哪里出了问题,因为我能够在gmail下完美地发送邮件 这是我的完整代码: Function SendEmail(ByVal Recipients As List(Of String), _ ByVal FromAddress As String, _ ByVal S

我的SMTP代码可以在gmail上运行,但当我在Yahoo和Hotmail上尝试时,总是失败。我已经输入了正确的服务器和端口,但它仍然不允许我发送。我真的很困惑我哪里出了问题,因为我能够在gmail下完美地发送邮件

这是我的完整代码:

Function SendEmail(ByVal Recipients As List(Of String), _
                  ByVal FromAddress As String, _
                  ByVal Subject As String, _
                  ByVal Body As String, _
                  ByVal UserName As String, _
                  ByVal Password As String, _
                  Optional ByVal Server As String, _
                  Optional ByVal Port As Integer, _
                  Optional ByVal Attachments As List(Of String) = Nothing) As String


    Dim Email As New MailMessage()
    Try
        Dim SMTPServer As New SmtpClient
        For Each Attachment As String In Attachments
            Email.Attachments.Add(New Attachment(Attachment))
        Next
        Email.From = New MailAddress(FromAddress)
        For Each Recipient As String In Recipients
            Email.To.Add(Recipient)
        Next
        Email.Subject = Subject
        Email.Body = Body
        SMTPServer.Host = Server
        SMTPServer.Port = Port
        SMTPServer.Credentials = New System.Net.NetworkCredential(UserName, Password)
        SMTPServer.EnableSsl = True
        SMTPServer.Send(Email)
        SMTPServer.Timeout = 500
        Email.Dispose()

        Return "Email to " & Recipients(0) & " from " & FromAddress & " was sent."
    Catch ex As SmtpException
        Email.Dispose()
        Return "Sending Email Failed. Smtp Error."
    Catch ex As ArgumentOutOfRangeException
        Email.Dispose()
        Return "Sending Email Failed. Check Port Number."
    Catch Ex As InvalidOperationException
        Email.Dispose()
        Return "Sending Email Failed. Check Port Number."
    End Try
End Function


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim Recipients As New List(Of String)
    Recipients.Add("put recipient email here")
    Dim FromEmailAddress As String = Recipients(0)
    Dim Subject As String = "subject goes here"
    Dim Body As String = "Email body goes here"
    Dim UserName As String = "put username here"
    Dim Password As String = "put password here"
    Dim Port As Integer = port number goes here
    Dim Server As String = "SMTP server goes here"
    Dim Attachments As New List(Of String)
    MsgBox(SendEmail(Recipients, FromEmailAddress, Subject, Body, UserName, Password, Server, Port, Attachments))

End Sub

与gmail相比,雅虎和Hotmail的表现是否有所不同?我对这件事真的很陌生。我今天刚开始学习,请耐心点。我们将接受任何建议或意见。提前感谢。

他们在不同的端口上工作:

Hotmail传出邮件服务器(SMTP)-SMTP.live.com(启用TLS,端口587)

Yahoo发送邮件服务器(SMTP)-SMTP.Mail.Yahoo.com(启用SSL,端口995)

确保您正在使用:

SMTPServer.EnableSsl = True
以及更改每个服务的SMTP端口。(在本例中,Hotmail为587)


一个是SSL,另一个是TLS。TLS(传输级安全性)是一个稍微宽泛的术语,它已经取代了SSL,所以不用担心,它将使用
启用SSL

工作。您可以使用.NET的
EASendMail
库,它会自动检测端口

我所做的例子:

   Private Function Hotmail_Sender(ByVal Account_User As String, ByVal Account_Password As String, ByVal Mail_To As String, ByVal Mail_Subject As String, ByVal Mail_Body As String, Optional ByVal Mail_Attachments() As String = Nothing) As Boolean

       Dim Hot_Mail As New EASendMail.SmtpMail("TryIt")
       Dim Hot_Server As New EASendMail.SmtpServer("smtp.live.com")
       Dim Hot_Smtp As New EASendMail.SmtpClient()

       Hot_Server.User = Account_User
       Hot_Server.Password = Account_Password
       Hot_Server.ConnectType = EASendMail.SmtpConnectType.ConnectSSLAuto

       Hot_Mail.From = Account_User
       Hot_Mail.To = Mail_To
       Hot_Mail.Subject = Mail_Subject
       Hot_Mail.TextBody = Mail_Body
       If Mail_Attachments IsNot Nothing Then For Each Attachment In Mail_Attachments : Hot_Mail.AddAttachment(Attachment) : Next

       Try : Hot_Smtp.SendMail(Hot_Server, Hot_Mail) : Return True
       Catch ex As Exception : Return False : End Try

   End Function

你在hotmail上使用了哪些端口号对于yahoo我使用了smtp.mail.yahoo.com端口465和hotmail smtp.live.com端口465。阅读我的回答,你有这两台服务器的信息。在两者上都使用EnableSSl。他们使用587和995无需使用第三方程序集发送简单的电子邮件。只需使用他们的服务器信息。该库的beneffits比我所评论的要多。如果不想浪费时间更新所有smtp服务器的端口,这是最好的选择。我创建的异常正在捕获它:Catch ex As SmtpException Email.Dispose()Return“Sending Email Failed.smtp Error”。是的,这是正确的。您使用的端口一定是错误的。根据目标服务器的smtp地址更改端口号。如果使用smtp.live.com地址,端口为587,如果使用smtp.mail.yahoo.com端口为995,则这些端口已替换为您提供给我的端口,但仍然提供smtpexception。在gmail上我没有遇到过这样的问题。邮箱不可用。服务器响应为:5.3.4未采取请求的操作;我们注意到您的Hotmail帐户中存在一些异常活动。为了帮助保护您,我们暂时阻止了您的帐户这是一个,但这是我创建的一个新帐户,我从未使用此帐户发送过一封邮件。好的,您正在执行非法操作,例如使用错误的密码登录或使用编程攻击错误的端口。帐户必须已锁定。登录hotmail网站并采取必要的行动。也许你需要重新激活你的帐户