Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vb.net 2010中发送电子邮件时出错_Vb.net_Vb.net 2010 - Fatal编程技术网

在vb.net 2010中发送电子邮件时出错

在vb.net 2010中发送电子邮件时出错,vb.net,vb.net-2010,Vb.net,Vb.net 2010,我必须输入以下代码: Try Dim mail As New MailMessage() Dim SmtpServer As New SmtpClient("smtp.gmail.com") mail.From = New MailAddress(txtid.Text) mail.[To].Add(TextBox1.Text) mail.Subject = txtsub.Text mail.Body = txtmess.Text ' mai

我必须输入以下代码:

Try
    Dim mail As New MailMessage()
    Dim SmtpServer As New SmtpClient("smtp.gmail.com")
    mail.From = New MailAddress(txtid.Text)
    mail.[To].Add(TextBox1.Text)
    mail.Subject = txtsub.Text
    mail.Body = txtmess.Text
    ' mail.Attachments.Add(New Attachment(OpenFileDialog1.FileName))
    SmtpServer.Port = 587
    SmtpServer.Credentials = New System.Net.NetworkCredential(txtid.Text, txtpass.Text)
    SmtpServer.EnableSsl = True

    SmtpServer.Send(mail)
    MsgBox("E-mail Has Been Send Successfully !")
Catch ex As Exception
    MsgBox(ex.Message)
End Try
在台阶上

SmtpServer.Send(mail)
我总是遇到一个错误:发送邮件失败

知道怎么修吗


请注意,我使用的是VB.NET

,因为您收到了一个
SmtpException
,文档中指出以下原因可能是原因:

  • 与SMTP服务器的连接失败
  • 身份验证失败
  • 操作超时
  • EnableSsl
    设置为
    true
    ,但
    DeliveryMethod
    属性设置为
    SpecifiedPickupDirectory
    PickupDirectoryFromIis
  • EnableSsl
    设置为
    true
    ,但SMTP邮件服务器在响应EHLO命令时未公布STARTTLS
我会在用户名和密码文本值中使用
Trim()
,以删除任何可能的前导或尾随空格,如下所示:

SmtpServer.Credentials = New System.Net.NetworkCredential(txtid.Text.Trim(), 
                                                          txtpass.Text,Trim())
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network
我还建议强制
DeliveryMethod
使用SMTP服务器,如下所示:

SmtpServer.Credentials = New System.Net.NetworkCredential(txtid.Text.Trim(), 
                                                          txtpass.Text,Trim())
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network

尝试在端口465(使用SSL)和端口587(使用TLS)上配置SMTP服务器,这对我很有用。

我自己的实验表明.NET的SmtpClient类实际上不支持SSL上的SMTP(SMTPS)。在客户端对象上切换.EnableSsl标志将导致客户端使用STARTTLS

这并不奇怪,因为SMTPS已经被弃用,取而代之的是STARTTLS,原因有很多,其中大部分与新旧客户机和服务器之间的无缝互操作性有关

SMTPS:客户端打开与目标服务器的TCP连接。两人立即开始SSL握手,然后使用常规SMTP协议(EHLO、AUTH等)通过SSL隧道进行通信

STARTTLS:客户端打开与目标服务器的TCP连接。客户机发出一个EHLO,然后发出一个STARTTLS。这是使用纯文本完成的。STARTTLS命令提示客户端和服务器在已经打开的套接字上启动SSL握手。所有未来的通信(AUTH命令和其他)都是通过现在建立的SSL隧道完成的

当SmtpClient对象连接到需要SMTPS的服务器时,会出现问题。客户端在打开它的套接字之后将发送EHLO,而不是立即启动SSL握手,这将导致服务器考虑SSL握手失败,并且连接将停滞或死亡。客户端将超时,您将收到SmtpException

任何侦听端口465的SMTP服务器都可能需要SMTPS。SMTPS有自己的专用端口,不能选择性地支持STARTTLS,因为STARTTLS根据定义要求服务器在使用SSL之前接受并响应打开的EHLO和STARTTLS命令

但是,如果服务器软件支持STARTTLS,并且服务管理员选择启用STARTTLS,则传统端口(如587或25)上的SMTP服务器可以选择支持STARTTLS。这就是为什么许多在互联网上发布关于这个问题的帖子的人都注意到,通过将端口从465更改为587,他们能够让SmtpClient工作



简短版本:SmtpClient类支持STARTTLS,而不支持SSL上的SMTP(SMTPS)。如果要在客户端对象上使用.EnableSsl标志,请确保所连接的服务器和端口支持STARTTLS。如果服务器和端口正在侦听并期望真正的SMTPS,则客户端对象将无法成功连接,发送将失败。端口465几乎专门用于SMTPS。当STARTTLS可用时,端口25和587用于常规SMTP或SMTP w/STARTTLS支持(可选)。

什么是异常类型?@KarlAnderson这是一个SMTPException。我尝试过测试端口,但仍然是第n个:/gmail非常可靠(如果您考虑到端口问题的话)我有一个代码发送电子邮件没有任何问题做几乎相同的你。我只能想到:要么你输入了错误的登录信息,要么账号被屏蔽了。请记住,在测试此类代码时,新帐户可能会被阻止(他们要求您输入您的电话号码);确保一切正常的最佳方法是登录此帐户并确认没有任何警告/消息要求您提供进一步信息;如果有类似的情况,请修复它,使此代码能够工作。您应该尝试的端口是587和25(我在以前的评论中写了一个输入错误):我将继续尝试从可能的场景列表中找出原因,请参阅更新的答案。我尝试了SmtpDeliveryMethod。但是我仍然收到相同的错误。。