2011-03-13 109 views
0

我正在开发与vb2005,使用system.net.mail发送邮件使用谷歌配置。我的代码一个完整的样品posted here早期system.net.mail不发送邮件

 With smtp 
      .Host = "smtp.google.com" 
      .Port = 465 
      .UseDefaultCredentials = False 
      .Credentials = New System.Net.NetworkCredential(mygoogleemail, mypass) 
      .EnableSsl = true 
      .Timeout = 60000 
     End With 

我得到的操作超时。如果我改变端口为587,它说the server does not support secure connection

[编辑] 防火墙可以阻止它吗?

是否有指定发送应用程序名称?

+0

谷歌将不会让你使用它的SMTP服务器发送垃圾邮件重试。将超时时间增加至少5分钟。尝试gmail.com主机。 – 2011-03-13 14:45:00

+0

@Hans Passant只用1封电子邮件测试我的应用程序,并且它不发送 – Smith 2011-03-13 15:42:52

回答

2

尝试

Dim myLogin As New NetworkCredential("[email protected]", "password") 
Dim msg As New MailMessage("[email protected]", "[email protected]", "subjectLine", "emailBodyText") 

msg.IsBodyHtml = True 

Try 
    Dim client As New SmtpClient("smtp.gmail.com", 587) 
    client.EnableSsl = True 
    client.UseDefaultCredentials = false 
    client.Credentials = myLogin 
    client.Send(msg) 
Catch ex As SmtpException 
    msgbox(ex.Message) 
End Try 

如果你再超时解决

  1. 前往gmail.com,并确保您可以登录电子使用这些凭据。
  2. 登录到gmail帐户并转到设置并确保已设置POP/IMAP。我认为他们不允许你通过你的账户发送邮件,除非这是开启的。
  3. 尝试使用SSL将端口更改为25。
  4. 尝试远程登录邮件服务器,看看你是否能够通过ISP发送邮件中继

    打开命令提示符,然后键入(不带引号)的telnet smtp.gmail.com 25

如果你得到一个超时,那么问题是你的本地局域网阻止邮件或你的ISP。

+0

我可以telnet到587谷歌,但是当我使用我的应用程序,它说操作时间到了 – Smith 2011-03-13 18:30:36

+0

然后问题必须在GMail帐户设置。尝试使用Outlook等电子邮件客户端并设置具有相同凭据的帐户,然后查看是否可以发送电子邮件。 – 2011-03-15 03:15:06

+0

实际上,我只是使用另一台smtp服务器,它工作。我不知道什么是错误的谷歌 – Smith 2011-03-16 14:02:33

2

您是否尝试过在答案:Sending email through Gmail SMTP server with C#

只是为了看看是否能工程。

注意的是,在回答他的解决方案,他提到的web.config变化在低不接受的答案后

<system.net> 
    <mailSettings> 
    <smtp from="[email protected]" deliveryMethod="Network"> 
     <network defaultCredentials="false" enableSsl="true" host="smtp.gmail.com" port="587" password="password" userName="[email protected]"/> 
    </smtp> 
    </mailSettings> 
</system.net> 
+0

我在这里完成的操作和您发布的链接所做的操作有什么不同? – Smith 2011-03-13 14:21:10

+0

是的,他提到了web.config必须做的改变。 – sclarson 2011-03-13 15:05:19

+0

我没有开发一个web应用程序,而是一个桌面应用程序 – Smith 2011-03-13 15:44:00

-1

的端口号是587。

而且也试试这个顺序按照this solution

With smtp 
     .UseDefaultCredentials = False 
     .Credentials = New System.Net.NetworkCredential("[email protected]", "mypwd") 
     .Host = "smtp.gmail.com" 
     .Port = 587 
     .EnableSsl = true 
    End With 
+0

我仍然得到同样的错误'服务器不支持安全连接' – Smith 2011-03-13 14:03:21

+0

@smith:can你发布你正在使用的确切代码。我没有看到用双引号 – naveen 2011-03-13 15:12:03

+0

包含的smtp.google.com,这是一个错字,并且被纠正了 – Smith 2011-03-13 15:44:44

1

的端口是正确的OP,但主机是错误的

With smtp 
     .Port = 465 '465 for ssl 
     .EnableSsl = True 
     .UseDefaultCredentials = False 
     .Credentials = New System.Net.NetworkCredential("[email protected]", "yourpassword") 
     .Host = "smtp.gmail.com" 
    End With 

而只是为了验证,你在Gmail中启用了弹出窗口,是否正确?

+0

我的代码有什么问题? – Smith 2011-03-13 16:31:03

+0

.Host =“smtp.google.com” – dbasnett 2011-03-13 17:27:33

+0

您是否看到区别? – dbasnett 2011-03-14 17:07:32

0

如果使用两个用于Gmail的步骤验证,则先禁用它,然后用这个代码

Dim myLogin As New NetworkCredential("[email protected]", "password") 
Dim msg As New MailMessage("[email protected]", "[email protected]", "subjectLine", "emailBodyText") 

msg.IsBodyHtml = True 

Try 
    Dim client As New SmtpClient("smtp.gmail.com", 587) 
    client.EnableSsl = True 
    client.UseDefaultCredentials = false 
    client.Credentials = myLogin 
    client.Send(msg) 
Catch ex As SmtpException 
    msgbox(ex.Message) 
End Try 
相关问题