簡體   English   中英

使用 VB.Net 發送郵件

[英]Send mail with VB.Net

我有一個類似看門狗的程序,如果滿足某些條件,它應該向我自己的郵件地址發送郵件。

我有一個 gmail 帳戶,所以基本上我想從我自己的 gmail 地址發送一封郵件到同一個地址。

這是我正在使用的代碼。

Public Sub MyContactByMail(ByVal Username As String, ByVal Password As String, ByVal SmtpServerPort As Integer, ByVal SmtpServerHost As String, ByVal MailFrom As String, ByVal MailTo As String, ByVal MailSubject As String, ByVal MailText As String)

    Try
        Dim SmtpServer As New SmtpClient()
        Dim mail As New MailMessage()
        SmtpServer.Credentials = New Net.NetworkCredential(Username, Password)
        SmtpServer.Port = SmtpServerPort
        SmtpServer.Host = SmtpServerHost
        mail = New MailMessage()
        mail.From = New MailAddress(MailFrom)
        mail.To.Add(MailTo)
        mail.Subject = MailSubject
        mail.Body = MailText
        SmtpServer.Send(mail)
    Catch ex As Exception
        Console.ForegroundColor = ConsoleColor.Red
        Console.WriteLine("Class -> ClassStorage, Method -> MyContactByMail, Error -> " & ex.Message)
    End Try
End Sub



Username... My own e-mail address (gmail)
Password... My password for the gmail account
SmtpServerPort... 465
SmtpServerHost... smtp.gmail.com
MailFrom... My own e-mail address (gmail)
MailTo... My own e-mail address (gmail)
MailSubject... some Text
MailText... some Text

我從來沒有嘗試過以這種方式發送郵件,所以整個主題對我來說都很新鮮。

我發現這個頁面很有幫助:

https://support.google.com/a/answer/176600?hl=en

我嘗試了以下方法:

a)Gmail SMTP 服務器

smtp.gmail.com + port 465

這是帶有 paping 的連接測試:

在此處輸入圖片說明

看來我可以連接到這個地址+端口。

但是 VB 仍然拋出異常。

這意味着,無法從連接讀取數據。

  • InnerException {"Von der Übertragungsverbindung können keine Daten gelesen werden: net_io_connectionclosed。"} System.Exception

    smtp.gmail.com + 端口 587

再次測試與 paping 的連接

在此處輸入圖片說明

這是 VB 程序的例外。

  • InnerException {"Die Verbindung mit dem Remoteserver kann nicht hergestellt werden。"} System.Exception

b) 受限 Gmail SMTP 服務器

aspmx.l.google.com + port 25

我嘗試使用 paping 連接到端口,但顯然我無法連接到它。 然而,防火牆配置為讓 paping 隨心所欲。

在此處輸入圖片說明

這是 VB 程序的例外:

它說,無法建立到遠程計算機的連接......這與使用 paping 的結果幾乎相同。

  • InnerException {"Die Verbindung mit dem Remoteserver kann nicht hergestellt werden。"} System.Exception

目前我沒有 G-Suit 帳戶 - 我不明白是否必須擁有一個 G-Suite 帳戶才能完成這項工作。 也許這就是問題所在。

如果可能的話,我會盡量避免為此付費。


到目前為止,我已經使用本教程: http : //vb.net-informations.com/communications/vb.net_smtp_mail.htm


好像我有兩個問題:

a) 我的開發機器上的連接問題 - 這是一台公司筆記本電腦,我無法完全控制防火牆,所以我猜有一些默認設置會否決我的設置並使端​​口 587 無法工作。

我嘗試在私人筆記本電腦上使用 paping 進行連接,並且成功了。

b) 現在在私人筆記本電腦上,我有一條不同的錯誤消息:

在此處輸入圖片說明

這意味着:對於 SMTP 服務器,需要安全連接,或者客戶端未通過身份驗證。 服務器的回答是:5.5.1 需要身份驗證

這是我正在使用的當前代碼:

Public Sub MyContactByMail(ByVal Username As String, ByVal Password As String, ByVal SmtpServerPort As Integer, ByVal SmtpServerHost As String, ByVal MailFrom As String, ByVal MailTo As String, ByVal MailSubject As String, ByVal MailText As String)

Try
    Dim SmtpServer As New SmtpClient()
    Dim mail As New MailMessage()
    SmtpServer.Credentials = New Net.NetworkCredential(Username, Password)
    SmtpServer.Port = SmtpServerPort
    SmtpServer.Host = SmtpServerHost
    SmtpServer.EnableSsl = True
    SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network
    SmtpServer.UseDefaultCredentials = False
    mail = New MailMessage()
    mail.From = New MailAddress(MailFrom)
    mail.To.Add(MailTo)
    mail.Subject = MailSubject
    mail.Body = MailText
    SmtpServer.Send(mail)
Catch ex As Exception
    Console.ForegroundColor = ConsoleColor.Red
    Console.WriteLine("Class -> ClassProcessingError, Method -> MyContactByMail, Error -> " & ex.Message)
End Try

結束子


我確實檢查了我的谷歌帳戶中的設置以允許不太安全的應用程序。 有趣的是,默認設置是允許安全性較低的應用程序。

在此處輸入圖片說明

所以這個設置沒有任何幫助。

我也確實將我的密碼更改為強密碼......這也沒有改變任何東西。

我仍然收到相同的身份驗證錯誤消息。

有一個部分包含上次使用的設備...

有趣的是,VB.Net 應用程序甚至沒有出現在那里。

它只顯示瀏覽器連接到我的帳戶的嘗試。

在此處輸入圖片說明

氪,

安德烈亞斯

答案 #1(無法連接到遠程服務器)

看起來你需要添加這個(特別是第 1 行)。 按指定順序使用以下所有行:

SmtpServer.EnableSsl = true
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network
SmtpServer.UseDefaultCredentials = false
SmtpServer.Credentials = new NetworkCredential(fromAddress.Address, fromPassword)

在下面引用這個答案

另外兩個端口有加密; 587 使用 TLS,465 使用 SSL。

要使用 587,您應該設置 SmtpClient.EnableSsl = true。

465 無法與 SmtpClient 一起使用,它將與已棄用的類 SmtpMail 一起使用。


針對以下錯誤的答案 #2(需要 5.5.1 身份驗證):

SMTP 服務器需要安全連接或客戶端未通過身份驗證。 服務器響應為:5.5.1 需要身份驗證。

您需要允許您的 Google 帳戶使用其他設備/應用程序發送電子郵件。 請參閱 Google 帳戶安全

在“訪問不太安全的應用程序”部分下,您可以啟用從其他設備/應用程序訪問您的帳戶...例如您的 C# 應用程序。

這段代碼終於對我有用:

在設置網絡憑據之前,我必須設置 SmtpServer.UseDefaultCredentials = False。

它真的是一個愚蠢的問題:-)但是我很高興它現在正在工作。

感謝大家的幫助 - 鏈接幫助了很多。

Public Sub MyContactByMail(ByVal Username As String, ByVal Password As String, ByVal SmtpServerPort As Integer, ByVal SmtpServerHost As String, ByVal MailFrom As String, ByVal MailTo As String, ByVal MailSubject As String, ByVal MailText As String)

    Try
        Dim SmtpServer As New SmtpClient()
        Dim mail As New MailMessage()
        SmtpServer.UseDefaultCredentials = False
        SmtpServer.Credentials = New Net.NetworkCredential(Username, Password)
        SmtpServer.Port = SmtpServerPort
        SmtpServer.Host = SmtpServerHost
        SmtpServer.EnableSsl = True
        SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network
        mail = New MailMessage()
        mail.From = New MailAddress(MailFrom)
        mail.To.Add(MailTo)
        mail.Subject = MailSubject
        mail.Body = MailText
        SmtpServer.Send(mail)
    Catch ex As Exception
        Console.ForegroundColor = ConsoleColor.Red
        Console.WriteLine("Class -> ClassProcessingError, Method -> MyContactByMail, Error -> " & ex.Message)
    End Try
End Sub

這工作正常

Try
    Dim SmtpServer As New SmtpClient()
    Dim mail As New MailMessage()
    SmtpServer.UseDefaultCredentials = False
    SmtpServer.Credentials = New Net.NetworkCredential(Username, Password)
    SmtpServer.Port = SmtpServerPort
    SmtpServer.Host = SmtpServerHost
    SmtpServer.EnableSsl = True
    SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network
    mail = New MailMessage()
    mail.From = New MailAddress(MailFrom)
    mail.To.Add(MailTo)
    mail.Subject = MailSubject
    mail.Body = MailText
    SmtpServer.Send(mail)
Catch ex As Exception
    Console.ForegroundColor = ConsoleColor.Red
    Console.WriteLine("Class -> ClassProcessingError, Method -> MyContactByMail, Error -> " & ex.Message)
End Try

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM