2015-11-03 162 views
1

我有一个程序,我已经设置了一个家庭自动化应用程序。我的目标是在发生严重错误时将其发送给我,但我遇到了smtp部分的问题。我能够使用我公司的SMTP工作,使我的应用程序工作得很好(基本上,我想在尝试转向免费选项之前先开始一个工作的,封闭的系统,因为那些限制性更强,具有讽刺意味)。是否仍可以使用SMTP发送电子邮件/文本?

我已经在网上运行了很多很多的例子,它似乎是SMTP阻塞某些方法/端口的问题。我已经尝试了下面的代码与端口25,465和587(在线使用的公共端口)。我也尝试将EnableSs1更改为false,但那也没有奏效。

我知道我可以为SMTP服务器支付费用,但我试图首先以便宜的价格购买(免费)。实际上,我并不期望需要很多通知。我发现turboSMTP,这是免费的,但我不得不使用免费的电子邮件地址,他们验证您的家庭地址(这听起来有点阴凉......)。

无论如何,我的代码如下。如果有任何方法可以使这项工作(或者如果你知道一个免费的,可用的SMTP或甚至另一种方法来做到这一点),请让我知道!

我非常愿意自己做这个工作,我不只是试图从别人那里得到解决方案,但是我知道该怎么做的最后。任何帮助,你可以给我,将不胜感激。谢谢!

Try 
     Dim Smtp_Server As New SmtpClient 
     Dim e_mail As New MailMessage() 
     Smtp_Server.UseDefaultCredentials = True 
     Smtp_Server.EnableSsl = False 
     Smtp_Server.Host = "smtp.gmail.com" 
     Smtp_Server.Port = 465 
     Smtp_Server.EnableSsl = True 
     e_mail.From = New MailAddress("From Email Address", "From Email Name") 
     e_mail.To.Add("My Phone [email protected]") 

     e_mail.Subject = "Hello there!" 
     e_mail.IsBodyHtml = False 
     e_mail.Body = txtMessage.Text 

     Smtp_Server.Send(e_mail) 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
+1

此代码接收的错误消息是什么?任何与无效凭证有关的东西? – Steve

+0

哦,这是一个相当长的响应端口25或587(失败,发送电子邮件,无法连接到删除服务器,试图访问一个套接字的方式禁止它的访问权限等)。听起来像这些端口只是平坦的被阻止以这种方式被使用。虽然端口465似乎超时。 –

+0

你表明你想要的只是一项免费服务。 FWIW,我在AOL上添加了一个NetworkCredential来测试你的代码,它工作正常。根据他们的设置说明,只需使用端口587和Enablessl = True即可。 – TnTinMn

回答

0
Imports System.Net.Mail 
... 
Try 
     Dim Email As New MailMessage() 
     Email.From = New MailAddress("[email protected]") 
     Email.To.Add("[email protected]") 
     Email.Subject = "TEST GMAIL" 
     Email.IsBodyHtml = False 
     Email.Body = TextBox1.Text 

     Dim EmailClient As New SmtpClient("smtp.gmail.com", 587) 
     EmailClient.EnableSsl = True 
     EmailClient.Credentials = New Net.NetworkCredential("[email protected]", "password") 
     EmailClient.Timeout = 7000 
     EmailClient.Send(Email) 

Catch ex As SmtpException 
     MsgBox(ex.StatusCode & vbCrLf & ex.Message, vbCritical, "SMTP Error!") 
End Try 

奇怪。 Google帮助建议使用端口465 - 不工作,超时。在端口587发送邮件。 EnableSsl必须设置为True。在凭证中,用户名必须是完整的电子邮件地址。

在VB2010上测试没有错误。电子邮件立即交付。

UPDATE:以毫秒为单位添加超时并将catch修改为SmtpException。 目标框架:.NET Framework 4客户端配置文件

+0

我猜测它可以在没有两步授权或商业账户的账户(比如我自己拥有的账户)中工作......你没有得到安全例外吗? – fabrosell

+0

嗯...我有正常的帐户没有2步骤验证...发送快速没有错误,没有问题... – c4pricorn

+0

嗯。这真的很奇怪。我直接将你的代码粘贴到我的应用程序中(更新了认证),它似乎不起作用(我得到“无法发送”)。我想这可能意味着端口在工作时被阻塞(IT告诉我不是这样),它在电子邮件收件人端被阻止(在我的情况下,@ mms.att.net和@ hotmail.com) ,或者它可能与VB2012有关?我的计算机上有VB2010,我也会在那里尝试。我会让你知道它是怎么回事! –