2011-03-13 205 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 
相關問題